ソースを参照

支持json转换

James 3 年 前
コミット
c6726f5807
1 ファイル変更24 行追加16 行削除
  1. 24 16
      src/main/java/com/jfinal/core/paragetter/ModelGetter.java

+ 24 - 16
src/main/java/com/jfinal/core/paragetter/ModelGetter.java

@@ -15,7 +15,7 @@
  */
 package com.jfinal.core.paragetter;
 
-import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import com.jfinal.core.Action;
 import com.jfinal.core.Controller;
 import com.jfinal.kit.ReflectKit;
@@ -34,31 +34,39 @@ public class ModelGetter<T> extends ParaGetter<T> {
 	}
 	
 	@Override
-	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public T get(Action action, Controller c) {
 		String paraName = this.getParameterName();
 		
 		// 支持 json 数据请求注入 action 形参
 		if (ParaProcessor.resolveJson && c.isJsonRequest()) {
-			com.alibaba.fastjson.JSONObject attrs;
-			HttpServletRequest req = c.getRequest();
-			if (req.getParameterMap().containsKey(paraName)) {
-				// 存在与 action 形参名相同的 request 参数则使用其 value 值进行转换
-				// attrs = JSON.parseObject(req.getParameter(paraName), HashMap.class);
-				attrs = com.alibaba.fastjson.JSON.parseObject(req.getParameter(paraName));
-			} else {
-				// 否则使用整个请求中的 json 进行转换
-				// attrs = JSON.parseObject(c.getRawData(), HashMap.class);
-				attrs = com.alibaba.fastjson.JSON.parseObject(c.getRawData());
-			}
-			
-			Model ret = (Model) ReflectKit.newInstance(modelClass);
-			return (T)ret._setOrPut(attrs);
+			return resolveJson((JsonRequest)c.getRequest(), paraName);
 		} else {
 			return c.getModel(modelClass, paraName, true);
 		}
 	}
 	
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	private T resolveJson(JsonRequest req, String paraName) {
+		com.alibaba.fastjson.JSONObject jsonObj = req.getJSONObject();
+		if (jsonObj == null) {
+			return null;
+		}
+		
+		HashMap<String, Object> attrs;
+		if (jsonObj.containsKey(paraName)) {
+			// 存在与 action 形参名相同的 request 参数则使用其 value 值进行转换
+			// attrs = JSON.parseObject(req.getParameter(paraName), HashMap.class);
+			attrs = jsonObj.getObject(paraName, HashMap.class);
+		} else {
+			// 否则使用整个请求中的 json 进行转换
+			// attrs = JSON.parseObject(c.getRawData(), HashMap.class);
+			attrs = jsonObj.toJavaObject(HashMap.class);
+		}
+		
+		Model ret = (Model) ReflectKit.newInstance(modelClass);
+		return (T)ret._setOrPut(attrs);
+	}
+	
 	@Override
 	protected T to(String v) {
 		return null;