|
|
@@ -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
|