Browse Source

Json 解析机制由 ParaProcessor 挪至 ActionHandler,支持 action 无参时被触发

James 3 years ago
parent
commit
083486780d

+ 3 - 3
src/main/java/com/jfinal/config/Constants.java

@@ -22,12 +22,12 @@ import javax.servlet.http.HttpServletRequest;
 import com.jfinal.aop.AopManager;
 import com.jfinal.captcha.CaptchaManager;
 import com.jfinal.captcha.ICaptchaCache;
+import com.jfinal.core.ActionHandler;
 import com.jfinal.core.ActionMapping;
 import com.jfinal.core.ActionReporter;
 import com.jfinal.core.Const;
 import com.jfinal.core.ControllerFactory;
 import com.jfinal.core.paragetter.JsonRequest;
-import com.jfinal.core.paragetter.ParaProcessor;
 import com.jfinal.i18n.I18n;
 import com.jfinal.json.IJsonFactory;
 import com.jfinal.json.JsonManager;
@@ -483,14 +483,14 @@ final public class Constants {
 	 * 配置是否解析 json 请求,支持 action 参数注入并支持 Controller 中与参数有关的 get 系方法,便于前后端分离项目
 	 */
 	public void setResolveJsonRequest(boolean resolveJsonRequest) {
-		ParaProcessor.setResolveJson(resolveJsonRequest);
+		ActionHandler.setResolveJson(resolveJsonRequest);
 	}
 	
 	/**
 	 * 配置 JsonRequest 工厂,用于切换 JsonRequest 扩展实现
 	 */
 	public void setJsonRequestFactory(BiFunction<String, HttpServletRequest, JsonRequest> jsonRequestFactory) {
-		ParaProcessor.setJsonRequestFactory(jsonRequestFactory);
+		ActionHandler.setJsonRequestFactory(jsonRequestFactory);
 	}
 	
 	// ---------

+ 22 - 0
src/main/java/com/jfinal/core/ActionHandler.java

@@ -16,9 +16,11 @@
 
 package com.jfinal.core;
 
+import java.util.function.BiFunction;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import com.jfinal.config.Constants;
+import com.jfinal.core.paragetter.JsonRequest;
 import com.jfinal.aop.Invocation;
 import com.jfinal.handler.Handler;
 import com.jfinal.kit.ReflectKit;
@@ -39,6 +41,21 @@ public class ActionHandler extends Handler {
 	protected static final RenderManager renderManager = RenderManager.me();
 	private static final Log log = Log.getLog(ActionHandler.class);
 	
+	public static boolean resolveJson = false;
+	
+	// 默认 JsonRequestFactory
+	private static BiFunction<String, HttpServletRequest, JsonRequest> jsonRequestFactory = (jsonString, req) -> {
+		return new JsonRequest(jsonString, req);
+	};
+	
+	public static void setResolveJson(boolean resolveJson) {
+		ActionHandler.resolveJson = resolveJson;
+	}
+	
+	public static void setJsonRequestFactory(BiFunction<String, HttpServletRequest, JsonRequest> jsonRequestFactory) {
+		ActionHandler.jsonRequestFactory = jsonRequestFactory;
+	}
+	
 	protected void init(ActionMapping actionMapping, Constants constants) {
 		this.actionMapping = actionMapping;
 		this.devMode = constants.getDevMode();
@@ -83,6 +100,11 @@ public class ActionHandler extends Handler {
 			controller = controllerFactory.getController(action.getControllerClass());
 			controller._init_(action, request, response, urlPara[0]);
 			
+			if (resolveJson && controller.isJsonRequest()) {
+				// 注入 JsonRequest 包装对象接管 request
+				controller.setHttpServletRequest(jsonRequestFactory.apply(controller.getRawData(), controller.getRequest()));
+			}
+			
 			if (devMode) {
 				if (actionReporter.isReportAfterInvocation(request)) {
 					new Invocation(action, controller).invoke();

+ 2 - 1
src/main/java/com/jfinal/core/paragetter/BeanGetter.java

@@ -19,6 +19,7 @@ import java.lang.reflect.Parameter;
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
 import com.jfinal.core.Action;
+import com.jfinal.core.ActionHandler;
 import com.jfinal.core.Controller;
 
 public class BeanGetter<T> extends ParaGetter<T> {
@@ -50,7 +51,7 @@ public class BeanGetter<T> extends ParaGetter<T> {
 	@Override
 	public T get(Action action, Controller c) {
 		// 支持 json 数据请求注入 action 形参
-		if (ParaProcessor.resolveJson && c.isJsonRequest()) {
+		if (ActionHandler.resolveJson && c.isJsonRequest()) {
 			return resolveJson((JsonRequest)c.getRequest());
 		} else {
 			return c.getBean(beanClass, this.getParameterName(), true);

+ 2 - 1
src/main/java/com/jfinal/core/paragetter/ModelGetter.java

@@ -17,6 +17,7 @@ package com.jfinal.core.paragetter;
 
 import java.util.Map;
 import com.jfinal.core.Action;
+import com.jfinal.core.ActionHandler;
 import com.jfinal.core.Controller;
 import com.jfinal.kit.ReflectKit;
 import com.jfinal.plugin.activerecord.Model;
@@ -36,7 +37,7 @@ public class ModelGetter<T> extends ParaGetter<T> {
 	@Override
 	public T get(Action action, Controller c) {
 		// 支持 json 数据请求注入 action 形参
-		if (ParaProcessor.resolveJson && c.isJsonRequest()) {
+		if (ActionHandler.resolveJson && c.isJsonRequest()) {
 			return resolveJson((JsonRequest)c.getRequest());
 		} else {
 			return c.getModel(modelClass, this.getParameterName(), true);

+ 0 - 22
src/main/java/com/jfinal/core/paragetter/ParaProcessor.java

@@ -15,8 +15,6 @@
  */
 package com.jfinal.core.paragetter;
 
-import java.util.function.BiFunction;
-import javax.servlet.http.HttpServletRequest;
 import com.jfinal.core.Action;
 import com.jfinal.core.Controller;
 
@@ -25,21 +23,6 @@ import com.jfinal.core.Controller;
  */
 public class ParaProcessor implements IParaGetter<Object[]> {
 	
-	static boolean resolveJson = false;
-	
-	// 默认 JsonRequestFactory
-	private static BiFunction<String, HttpServletRequest, JsonRequest> jsonRequestFactory = (jsonString, req) -> {
-		return new JsonRequest(jsonString, req);
-	};
-	
-	public static void setResolveJson(boolean resolveJson) {
-		ParaProcessor.resolveJson = resolveJson;
-	}
-	
-	public static void setJsonRequestFactory(BiFunction<String, HttpServletRequest, JsonRequest> jsonRequestFactory) {
-		ParaProcessor.jsonRequestFactory = jsonRequestFactory;
-	}
-	
 	private int fileParaIndex = -1;
 	private IParaGetter<?>[] paraGetters;
 	
@@ -59,11 +42,6 @@ public class ParaProcessor implements IParaGetter<Object[]> {
 	
 	@Override
 	public Object[] get(Action action, Controller c) {
-		if (resolveJson && c.isJsonRequest()) {
-			// 注入 JsonRequest 包装对象接管 request
-			c.setHttpServletRequest(jsonRequestFactory.apply(c.getRawData(), c.getRequest()));
-		}
-		
 		int len = paraGetters.length;
 		Object[] ret = new Object[len];