|
|
@@ -15,20 +15,50 @@
|
|
|
*/
|
|
|
package com.jfinal.core.paragetter;
|
|
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.jfinal.core.Action;
|
|
|
import com.jfinal.core.Controller;
|
|
|
+import com.jfinal.kit.ReflectKit;
|
|
|
+import com.jfinal.plugin.activerecord.Model;
|
|
|
|
|
|
+/**
|
|
|
+ * 注意: json 请求需要注意 json 中的字段名与数据库字段名一致,
|
|
|
+ */
|
|
|
public class ModelGetter<T> extends ParaGetter<T> {
|
|
|
|
|
|
private final Class<T> modelClass;
|
|
|
+
|
|
|
public ModelGetter(Class<T> modelClass, String parameterName) {
|
|
|
super(parameterName,null);
|
|
|
this.modelClass = modelClass;
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
+ @SuppressWarnings({ "rawtypes", "unchecked" })
|
|
|
public T get(Action action, Controller c) {
|
|
|
- return c.getModel(modelClass, this.getParameterName(),true);
|
|
|
+ String paraName = this.getParameterName();
|
|
|
+ if (ParaProcessor.resolveJson && c.isJsonRequest()) {
|
|
|
+ JSONObject attrs;
|
|
|
+ HttpServletRequest req = c.getRequest();
|
|
|
+ if (req.getParameterMap().containsKey(paraName)) {
|
|
|
+ // 存在与 action 形参名相同的 request 参数则使用其 value 值进行转换
|
|
|
+ // attrs = JSON.parseObject(req.getParameter(paraName), HashMap.class);
|
|
|
+ attrs = JSON.parseObject(req.getParameter(paraName));
|
|
|
+ } else {
|
|
|
+ // 否则使用整个请求中的 json 进行转换
|
|
|
+ // attrs = JSON.parseObject(c.getRawData(), HashMap.class);
|
|
|
+ attrs = JSON.parseObject(c.getRawData());
|
|
|
+ }
|
|
|
+
|
|
|
+ Model ret = (Model) ReflectKit.newInstance(modelClass);
|
|
|
+ return (T)ret._setOrPut(attrs);
|
|
|
+ } else {
|
|
|
+ return c.getModel(modelClass, paraName, true);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
@Override
|
|
|
protected T to(String v) {
|
|
|
return null;
|