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

相关文章

来自专栏osc同步分享

java 特性拾遗

静态导入 一个类中的静态方法和静态变量可以直接导入使用,而不必导入整个类。使用 import static package com.yawn.java8; i...

3557
来自专栏专注 Java 基础分享

基本数据类型及其包装类(一)

我们都说,Java 是一门面向对象型程序设计语言,但是它设计出来的「基本数据类型」仿佛又打破了这一点,所以,只能说 Java 是非 100% 纯度的面向对象程序...

3725
来自专栏Pythonista

Golang作用域—坑

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。

1003
来自专栏java一日一条

Java 泛型一览笔录

泛型(Generics )是把类型参数化,运用于类、接口、方法中,可以通过执行泛型类型调用 分配一个类型,将用分配的具体类型替换泛型类型。然后,所分配的类型将用...

751
来自专栏测试开发架构之路

总结了一些指针易出错的常见问题(三)

指针与字符串 NULL和NUL区别:前者用来表示特殊的指针((void*)0),而NUL是一个char(\0),不可混用。   字符常量:单引号;字符串:双引...

3467
来自专栏Golang语言社区

Go语言创建、初始化数组的各种方式

//数组初始化的各种方式 func arraySliceTest0201() { //创建数组(声明长度) var array...

3377
来自专栏用户2442861的专栏

java MS之泛型

http://blog.csdn.net/stypace/article/details/42102567

552
来自专栏hotqin888的专栏

golang

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

1063
来自专栏拭心的安卓进阶之路

深入理解 Java 泛型

首先提个问题: Java 泛型的作用是什么?泛型擦除是什么?泛型一般用在什么场景? 如果这个问题你答不上来,那这篇文章可能就对你有些价值。 什么是泛...

2949
来自专栏java学习

面试题1(选择正确的类型转换)

Which ofthe following are legal lines ofcode?( 下列哪些代码是合法的?) (a) int w=(int)888.8...

2755

扫码关注云+社区