com.chm.converter.fastjson2.reader.Fastjson2ObjectReaderCreator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of data-converter-fastjson2 Show documentation
Show all versions of data-converter-fastjson2 Show documentation
fastjson2 framework core components
package com.chm.converter.fastjson2.reader;
import com.alibaba.fastjson2.codec.BeanInfo;
import com.alibaba.fastjson2.modules.ObjectReaderModule;
import com.alibaba.fastjson2.reader.FieldReader;
import com.alibaba.fastjson2.reader.ObjectReader;
import com.alibaba.fastjson2.reader.ObjectReaderCreator;
import com.chm.converter.core.ClassInfoStorage;
import com.chm.converter.core.Converter;
import com.chm.converter.core.FieldInfo;
import com.chm.converter.core.JavaBeanInfo;
import com.chm.converter.core.UseRawJudge;
import com.chm.converter.core.codec.Codec;
import com.chm.converter.core.codec.DataCodecGenerate;
import com.chm.converter.core.codec.UniversalCodecAdapterCreator;
import com.chm.converter.core.universal.UniversalGenerate;
import com.chm.converter.core.utils.ClassUtil;
import com.chm.converter.core.utils.CollUtil;
import com.chm.converter.core.utils.ListUtil;
import com.chm.converter.core.utils.MapUtil;
import com.chm.converter.fastjson2.Fastjson2CoreCodec;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
/**
* @author caihongming
* @version v1.0
* @since 2022-07-05
**/
public class Fastjson2ObjectReaderCreator extends ObjectReaderCreator {
private final ObjectReaderCreator creator;
private final Class extends Converter> converterClass;
private final UniversalGenerate generate;
private final UseRawJudge useRawJudge;
private final static Map, List> CLASS_FIELD_READER_LIST_MAP = MapUtil.newConcurrentHashMap();
public Fastjson2ObjectReaderCreator(ObjectReaderCreator creator, Converter> converter, UseRawJudge useRawJudge) {
this(creator, converter, null, useRawJudge);
}
public Fastjson2ObjectReaderCreator(ObjectReaderCreator creator, Converter> converter, UniversalGenerate generate, UseRawJudge useRawJudge) {
this.creator = creator;
this.converterClass = converter != null ? converter.getClass() : null;
this.generate = generate != null ? generate : DataCodecGenerate.getDataCodecGenerate(converter);
this.useRawJudge = useRawJudge;
}
@Override
public ObjectReader createObjectReader(Class objectClass, Type objectType, boolean fieldBased, List modules) {
Class> clazz = ClassUtil.getClassByType(objectType);
// 使用原始实现
if (useRawJudge.useRawImpl(clazz)) {
return null;
}
ObjectReader priorityUse = UniversalCodecAdapterCreator.createPriorityUse(this.generate, objectType,
(type, codec) -> new Fastjson2CoreCodec<>(codec));
if (priorityUse != null) {
return priorityUse;
}
return super.createObjectReader(objectClass, objectClass, fieldBased, modules);
}
@Override
public FieldReader[] createFieldReaders(Class objectClass, Type objectType, BeanInfo beanInfo, boolean fieldBased, List modules) {
FieldReader[] fieldReaders = this.creator.createFieldReaders(objectClass, objectType);
if (useRawJudge.useRawImpl(objectClass)) {
return fieldReaders;
}
List readerList = MapUtil.computeIfAbsent(CLASS_FIELD_READER_LIST_MAP, (Class>) objectType, cls -> ListUtil.list(true));
JavaBeanInfo> javaBeanInfo = ClassInfoStorage.INSTANCE.getJavaBeanInfo(objectClass, converterClass);
Map fieldNameFieldInfoMap = javaBeanInfo.getFieldNameFieldInfoMap();
if (CollUtil.isEmpty(readerList) && CollUtil.isNotEmpty(fieldNameFieldInfoMap)) {
for (FieldReader fieldReader : fieldReaders) {
FieldInfo fieldInfo = fieldNameFieldInfoMap.get(fieldReader.getFieldName());
if (fieldInfo == null || !fieldInfo.isDeserialize()) {
continue;
}
readerList.add(new Fastjson2FieldReader<>(fieldInfo, fieldReader.getSchema()));
}
return readerList.toArray(new FieldReader[0]);
} else if (CollUtil.isNotEmpty(readerList)) {
return readerList.toArray(new FieldReader[0]);
}
return fieldReaders;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy