|
|
@@ -15,6 +15,9 @@
|
|
|
*/
|
|
|
package com.jfinal.core.paragetter;
|
|
|
|
|
|
+import java.lang.reflect.Parameter;
|
|
|
+import java.lang.reflect.ParameterizedType;
|
|
|
+import java.lang.reflect.Type;
|
|
|
import com.jfinal.core.Action;
|
|
|
import com.jfinal.core.Controller;
|
|
|
|
|
|
@@ -22,9 +25,29 @@ public class BeanGetter<T> extends ParaGetter<T> {
|
|
|
|
|
|
private final Class<T> beanClass;
|
|
|
|
|
|
- public BeanGetter(Class<T> beanClass, String parameterName) {
|
|
|
+ // 存放参数泛型,支持将 json 数组转化为带有泛型的 List,例如: List<User>、List<Integer>
|
|
|
+ private final Class<?> parameterizedType;
|
|
|
+
|
|
|
+ public BeanGetter(Class<T> beanClass, String parameterName, Parameter parameter) {
|
|
|
super(parameterName, null);
|
|
|
this.beanClass = beanClass;
|
|
|
+ this.parameterizedType = getParameterizedType(parameter);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Class<?> getParameterizedType(Parameter parameter) {
|
|
|
+ Type type = parameter.getParameterizedType();
|
|
|
+ if (type instanceof ParameterizedType) {
|
|
|
+ Type[] ts = ((ParameterizedType)type).getActualTypeArguments();
|
|
|
+ if (ts != null && ts.length > 0) {
|
|
|
+ try {
|
|
|
+ return Class.forName(ts[0].getTypeName());
|
|
|
+ } catch (ClassNotFoundException e) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -40,7 +63,7 @@ public class BeanGetter<T> extends ParaGetter<T> {
|
|
|
private T resolveJson(JsonRequest req) {
|
|
|
com.alibaba.fastjson.JSONObject jsonObj = req.getJSONObject();
|
|
|
if (jsonObj == null) {
|
|
|
- return null;
|
|
|
+ return toList(req.getJSONArray());
|
|
|
}
|
|
|
|
|
|
String paraName = this.getParameterName();
|
|
|
@@ -53,6 +76,19 @@ public class BeanGetter<T> extends ParaGetter<T> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private T toList(com.alibaba.fastjson.JSONArray jsonArr) {
|
|
|
+ if (jsonArr == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (parameterizedType != null) {
|
|
|
+ return (T) jsonArr.toJavaList(parameterizedType);
|
|
|
+ } else {
|
|
|
+ return (T) jsonArr.toJavaList(Object.class);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
protected T to(String v) {
|
|
|
return null;
|