java:利用fastjson判断一个类型(java.lang.reflect.Type)是否是一个javabean

来源:互联网 发布:linux开机自启动命令 编辑:程序博客网 时间:2024/04/29 15:09

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;    }}
阅读全文
0 0
原创粉丝点击