java:利⽤fastjson判断⼀个类型(flect.Type)。。。
fastjson中JSON(Object javaObject)⽅法将⼀个java对象被序列化成json对象时,返回的对象类型有三种可
能:JSONObject,JSONArray,原始类型(简单类型)。
最近在使⽤fastjson进⾏对java对象序列化和反序列化时,遇到⼀个问题:
需要判断⼀个类型(flect.Type)是否为⼀个java bean(这⾥所说的java bean并⾮完全符合JavaBean规范的类型,只要不是简单类型、Map、Collection、Array,能被fastjson序列化为JSONObject对象⽽不是JSONArray或简单类型就算),如果要⾃⼰实现这个代码还是挺复杂的,需要⼀⼤堆的类型判断。
fastjson怎么用研究了fastjson的代码之后,发现它也有这个判断需求(实现代码近200⾏,好复杂)。在fastjson的基础上实现这个判断就很⽅便了。
原理很简单 ,com.alibaba.fastjson.parser.ParserConfig类中有⼀个getDeserializer(Type)⽅法⽤于根据Type返回相应的反序列化器(Deserializer),如果返回的对象类型是JavaBeanDeserializer,这个Type肯定是个java bean对象。
如下代码:
import flect.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 Deserializer(type) instanceof JavaBeanDeserializer;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论