Browse Source

action 参数注入 Bean 支持 json 请求解析

James 3 years ago
parent
commit
53e4a2e30c
1 changed files with 20 additions and 3 deletions
  1. 20 3
      src/main/java/com/jfinal/core/paragetter/BeanGetter.java

+ 20 - 3
src/main/java/com/jfinal/core/paragetter/BeanGetter.java

@@ -15,18 +15,35 @@
  */
 package com.jfinal.core.paragetter;
 
+import javax.servlet.http.HttpServletRequest;
+import com.alibaba.fastjson.JSON;
 import com.jfinal.core.Action;
 import com.jfinal.core.Controller;
 
 public class BeanGetter<T> extends ParaGetter<T> {
-	private final Class<T> modelClass;
+	
+	private final Class<T> beanClass;
+	
 	public BeanGetter(Class<T> modelClass, String parameterName) {
 		super(parameterName, null);
-		this.modelClass = modelClass;
+		this.beanClass = modelClass;
 	}
+	
 	@Override
 	public T get(Action action, Controller c) {
-		return c.getBean(modelClass, this.getParameterName(),true);
+		String paraName = this.getParameterName();
+		if (ParaProcessor.resolveJson && c.isJsonRequest()) {
+			HttpServletRequest req = c.getRequest();
+			if (req.getParameterMap().containsKey(paraName)) {
+				// 存在与 action 形参名相同的 request 参数则使用其 value 值进行转换
+				return JSON.parseObject(req.getParameter(paraName), beanClass);
+			} else {
+				// 否则使用整个请求中的 json 进行转换
+				return JSON.parseObject(c.getRawData(), beanClass);
+			}
+		} else {
+			return c.getBean(beanClass, paraName, true);
+		}
 	}
 	
 	@Override