fastjson中JSON.toJSON(Object javaObject)方法将一个java对象被序列化成json对象时,返回的对象类型有三种可能:JSONObject,JSONArray,原始类型(简单类型)。
最近在使用fastjson进行对java对象序列化和反序列化时,遇到一个问题:
需要判断一个类型(java.lang.reflect.Type)是否为一个java bean(这里所说的java bean并非完全符合JavaBean规范的类型,只要不是简单类型、Map、Collection、Array,能被fastjson序列化为JSONObject对象而不是JSONArray或简单类型就算),如果要自己实现这个代码还是挺复杂的,需要一大堆的类型判断。
研究了fastjson的代码之后,发现它也有这个判断需求(实现代码近200行,好复杂)。在fastjson的基础上实现这个判断就很方便了。
原理很简单 ,com.alibaba.fastjson.parser.ParserConfig类中有一个getDeserializer(Type)方法用于根据Type返回相应的反序列化器(Deserializer),如果返回的对象类型是JavaBeanDeserializer,这个Type肯定是个java bean对象。
如下代码:
import java.lang.reflect.Type;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer;
public class TypeUtils{
public static final boolean isJavaBean(Type type){
if(null == type )
throw new NullPointerException();
// 根据 getDeserializer 返回值类型判断是否为 java bean 类型
return ParserConfig.global.getDeserializer(type) instanceof JavaBeanDeserializer;
}
}
本文介绍了一种利用FastJSON库高效判断Java类型是否符合JavaBean标准的方法。通过检查ParserConfig类的getDeserializer方法返回值类型来判断是否为JavaBean。此方法避免了繁琐的类型检查过程。
1万+





