
cn.dreampie.common.util.json.ModelDeserializer Maven / Gradle / Ivy
package cn.dreampie.common.util.json;
import cn.dreampie.common.entity.Entity;
import cn.dreampie.common.util.Stringer;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.JSONToken;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.*;
/**
* Created by ice on 14-12-31.
*/
public enum ModelDeserializer implements ObjectDeserializer {
INSTANCE;
public static ModelDeserializer instance() {
return INSTANCE;
}
public static Entity deserialze(JSONObject jsonObject, Class extends Entity> entityClass) {
Entity result;
try {
result = entityClass.newInstance();
} catch (Exception e) {
throw new JSONException("Could not init entity " + entityClass, e);
}
Object obj = null;
Method method = null;
String attrName = null;
Class> returnType = null;
List list = null;
List newlist = null;
JSONArray blist = null;
List> newblist = null;
Class returnTypeClass = null;
Set newset = null;
JSONArray bset = null;
Set> newbset = null;
for (Map.Entry entry : jsonObject.entrySet()) {
obj = entry.getValue();
if (obj != null) {
returnType = null;
try {
if (!result.hasColumn(entry.getKey())) {
attrName = Stringer.firstUpperCamelCase(entry.getKey());
try {
method = entityClass.getDeclaredMethod("get" + attrName);
returnType = method.getReturnType();
} catch (NoSuchMethodException getE) {
try {
method = entityClass.getDeclaredMethod("is" + attrName);
returnType = method.getReturnType();
} catch (NoSuchMethodException isE) {
}
}
} else {
returnType = result.getColumnType(entry.getKey());
}
if (returnType == null) {
result.put(entry.getKey(), entry.getValue());
continue;
}
//如果是String类型
if (String.class.isAssignableFrom(returnType)) {
result.put(entry.getKey(), obj.toString());
} else {
//判断是不是包含 Entity类型
if (obj instanceof JSONObject) {
if (Entity.class.isAssignableFrom(returnType)) {
result.put(entry.getKey(), deserialze((JSONObject) obj, (Class extends Entity>) returnType));
} else {
result.put(entry.getKey(), parse(obj, returnType));
}
} else
//判断是否是Entity的集合类型
if (obj instanceof JSONArray) {
if (Collection.class.isAssignableFrom(returnType)) {
returnTypeClass = (Class>) ((ParameterizedType) method.getGenericReturnType()).getActualTypeArguments()[0];
if (List.class.isAssignableFrom(returnType)) {
if (Entity.class.isAssignableFrom(returnTypeClass)) {
list = (List) obj;
newlist = new ArrayList();
for (JSONObject jo : list) {
newlist.add(deserialze(jo, (Class extends Entity>) returnTypeClass));
}
result.put(entry.getKey(), newlist);
} else {
blist = (JSONArray) obj;
if (String.class == returnTypeClass) {
newblist = new ArrayList();
for (Object o : blist) {
((List) newblist).add(o.toString());
}
} else {
newblist = new ArrayList
© 2015 - 2025 Weber Informatics LLC | Privacy Policy