首页 > 其他分享 >JSON反序列化中的泛型问题及解决方法

JSON反序列化中的泛型问题及解决方法

时间:2024-08-07 15:52:27浏览次数:13  
标签:JsonbBuilder create List json JSON 泛型 序列化 class

1、问题

Java的泛型是编译期擦除,因此反序列化无法直接指定泛型类型:

List<User> list = JsonbBuilder.create().fromJson(json, List<User>.class);

编译不通过,改为List.class又达不到预期效果。

2、解决办法

jackson的做法:

List<User> list = JsonbBuilder.create().fromJson(json, new TypeReference<List<User>>(){});

johnzon的做法:

List<User> list = JsonbBuilder.create().fromJson(json, new JohnzonCollectionType<List<User>>(){});

genson的做法:

List<User> list = JsonbBuilder.create().fromJson(json, new GenericType<List<User>>(){});

或者使用构造方法传入类型类和泛型类

List<User> list = JsonbBuilder.create().fromJson(json, new JohnzonParameterizedType(List.class, User.class));

注:User.class后面还可以接更多的泛型参数

总结

巧妙之处,Java虽然是泛型擦除,但子类可以拿到父类上的泛型类型。
所以TypeReferenceJohnzonCollectionTypeGenericType,无一例外都是抽象类,后面接了对大括号,表示是创建了该抽象类的匿名子类的实例,再由实例在运行时获取父类的泛型类型。

标签:JsonbBuilder,create,List,json,JSON,泛型,序列化,class
From: https://www.cnblogs.com/jiayuan2006/p/18347158

相关文章

  • 泛型
    泛型1.什么是泛型在Java中,泛型(Generics)是Java5(也称为JavaSE5.0或JDK1.5)中引入的一个重要特性,它提供了一种编译时类型安全检测机制,允许程序员在类、接口和方法中使用类型参数(TypeParameters)。这些类型参数在编译时会被具体的类型所替换,从而实现了代码的复用和类型安全。泛......
  • 泛型
    泛型什么是泛型?泛型(Generictype或者generics)是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。可以在集合框架(Collectionframework......
  • com.alibaba.fastjson 将object装jsonObject两次字段顺序会出现不一致
    Objectentity=params.get("entity");JSONObjectjsonObject=(JSONObject)JSONObject.toJSON(entity);//遍历JSONObjectfor(Map.Entry<String,Object>entry:jsonObject.entrySet())以上代码,在同一个object,两次经过的到时候,遍历J......
  • jQuery入门(五)Ajax和json
    一、Ajax简介AJAX(AsynchronousJavaScriptAndXML):异步的JavaScript和XML。本身不是一种新技术,而是多个技术综合。用于快速创建动态网页的技术。一般的网页如果需要更新内容,必需重新加载个页面。而AJAX通过浏览器与服务器进行少量数据交换,就可以使网页实现异......
  • Java泛型中的PECS 原则
    在Java泛型中,使用extends和super关键字来定义通配符的上界和下界,主要是为了保证类型安全,并且能够灵活地处理不同类型的集合。具体来说,使用extends和super的原因可以通过理解PECS(ProducerExtends,ConsumerSuper)原则来解释。PECS原则ProducerExtends:如果......
  • jsoncpp库的简易引入教程
    1.打开github上项目的主页jsoncpp2.clone到本地gitclonehttps://github.com/open-source-parsers/jsoncpp.git3.生成jsoncpp库的头文件以及源文件进入项目目录![[Pastedimage20240510150641.png]]执行Python命令,pythonamalgamate.py![[Pastedimage20240510150......
  • Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
    JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSONSchema呢?在数据交换领域,JSONSchema以其强大的标准化能力,为定义和规范JSON数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSONSchema能够详尽地描述数据的各项属性。然而,仅凭JSONSchema......
  • 无法反序列化解码 JWT python 时的关键数据
    我正在使用pyjwt库来解码JWT令牌。我在解码时遇到此错误。代码在文档中给出。importjwtencoded_jwt='''eyJ0eXAiOiJKV1QiLCJhbG......'''secret=b''''-----BEGINPUBLICKEY-----MIIFRjCCBC6gAwIBAgIQCIdSGhpikQCjOIY154XoqzANBgkqhkiG9......
  • Spring Boot 中使用 JSON Schema 来校验复杂JSON数据
    JSON是我们编写API时候用于数据传递的常用格式,那么你是否知道JSONSchema呢?在数据交换领域,JSONSchema以其强大的标准化能力,为定义和规范JSON数据的结构与规则提供了有力支持。通过一系列精心设计的关键字,JSONSchema能够详尽地描述数据的各项属性。然而,仅凭JSONSchema本......
  • 集合泛型,集合遍历,集合工具类
    集合泛型,集合遍历,集合工具类一.集合泛型在Java中,集合泛型(CollectionGenerics)是Java泛型(Generics)在集合框架(CollectionsFramework)中的一个重要应用。泛型提供了一种编译时类型安全检测机制,允许程序员在编译时期而不是运行时检查非法的类型。当将泛型应用于集合时,可以指定集合......