All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.silentgo.json.deserializer.DeserializerKit Maven / Gradle / Ivy

package com.silentgo.json.deserializer;

import com.silentgo.json.exception.DeserializerException;
import com.silentgo.json.mapping.getter.ValueGetKit;
import com.silentgo.json.mapping.getter.ValueGetter;
import com.silentgo.json.model.JSONEntity;
import com.silentgo.utils.ClassKit;
import com.silentgo.utils.ReflectKit;
import com.silentgo.utils.reflect.SGClass;
import com.silentgo.utils.reflect.SGField;

import java.lang.reflect.Type;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Project : json
 * Package : com.silentgo.json.deserializer
 *
 * @author teddyzhu
 *         

* Created by teddyzhu on 2017/1/11. */ public class DeserializerKit { private static final Map, Deserializer> typeDeserializer = new HashMap<>(); public static final Deserializer defaultDeserializer = new DefaultDeserializer(); private static final Deserializer defaultArrayDeserializer = new ArrayDeserializer(DeserializerKit.defaultDeserializer); private static final Deserializer defaultCollectionDeserializer = new CollectionDeserializer(DeserializerKit.defaultDeserializer); private static final Deserializer defaultMapDeserializer = new MapDeserializer(DeserializerKit.defaultDeserializer); static { ValueGetKit.getValueGetterMap().forEach(((aClass, valueGetter) -> typeDeserializer.put(aClass, new ValueGetterDeserializer(valueGetter)))); } public static Deserializer createDeserializer(Class tClass) { return createDeserializer(tClass, null); } public static Deserializer createDeserializer(Class tClass, SGField sgField) { if (typeDeserializer.containsKey(tClass)) return typeDeserializer.get(tClass); if (tClass.isArray()) { Class type = tClass.getComponentType(); return Object.class.equals(type) ? defaultArrayDeserializer : createDeserializer(type, null); } else if (Map.class.isAssignableFrom(tClass)) { Class target = Object.class; if (sgField != null) { Type type = sgField.getField().getGenericType(); target = ClassKit.getActualType(type, 1); } return Object.class.equals(target) ? defaultMapDeserializer : new MapDeserializer(createDeserializer(target, null)); } else if (Collection.class.isAssignableFrom(tClass)) { Class target = Object.class; if (sgField != null) { Type type = sgField.getField().getGenericType(); target = ClassKit.getActualType(type); } return Object.class.equals(target) ? defaultCollectionDeserializer : new CollectionDeserializer(createDeserializer(target, null)); } else if (Object.class.equals(tClass) || JSONEntity.class.isAssignableFrom(tClass)) { return DeserializerKit.defaultDeserializer; } else { ValueGetter valueGetter = ValueGetKit.getValueGetter(tClass); if (valueGetter == null) { if (tClass.getClassLoader() == null) throw new DeserializerException("do not support the type " + tClass.getName() + " ,please implement ValueGetter"); } else { Deserializer deserializer = sgField == null ? typeDeserializer.get(tClass) : new ValueGetterDeserializer(valueGetter); typeDeserializer.put(tClass, deserializer); return deserializer; } //only java bean should be created SGClass sgClass = ReflectKit.getSGClass(tClass); JavaBeanDeserializer deserializer1 = new JavaBeanDeserializer(sgClass); sgClass.getFieldMap().forEach((k, v) -> { Deserializer deserializer2 = createDeserializer(v.getType(), v); deserializer1.addDeserializer(k, deserializer2); }); typeDeserializer.put(tClass, deserializer1); return deserializer1; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy