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

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 条评论
登录 后参与评论

相关文章

来自专栏Java架构

Java 8简明教程

1895
来自专栏杨建荣的学习笔记

关于正则表达式第三篇(r3笔记第52天)

在正则表达式中,还有很多的内容值得学习。 之前的两篇中列举了很少的一部分。没有做更多的分析。 -->字符组 下面的例子可以根据字符组来灵活匹配。比如输入了Go...

3018
来自专栏偏前端工程师的驿站

Java魔法堂:初探MessageFormat.format和ChoiceFormat

一、前言                                 刚开始从.net的转向java的时候总觉得 String.format 用得不习惯,希...

1958
来自专栏GreenLeaves

C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

1、IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持f...

18910
来自专栏程序你好

C# 语言中Lambda(拉姆达) 表达式介绍

1414
来自专栏blackheart的专栏

[C#3] 1-扩展方法

1.从DEMO开始 先看一个扩展方法的例子: 1 class Program 2 { 3 public static void Main(...

20110
来自专栏Ryan Miao

Java8学习(3)- Lambda 表达式

猪脚:以下内容参考《Java 8 in Action》 本次学习内容: Lambda 基本模式 环绕执行模式 函数式接口,类型推断 方法引用 Lambda 复...

3159
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(List、Tuple、Dict、Set专栏-新排版)

在线预览:http://github.lesschina.com/python/base/pop/3.listtupledict_set.html

1865
来自专栏蓝天

rapidjson常见使用示例

Document d; v2.CopyFrom(d, a); // 把整个document复制至v2,d不变 rapidjson为了最大...

2702
来自专栏Kiba518

C#语法——泛型的多种应用

泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性、类型安全性和效率。

863

扫码关注云+社区