Jackson多态类型数据绑定

Jackson数据绑定在处理多态集成结构时,需要在序列化时存储类型信息以实现反序列化的准确性。本文介绍了两种开启类型信息存储的方法:全局Default Typing机制和在Class上添加@JsonTypeInfo注解。DefaultTyping提供了多个选项来决定何时存储类型信息,而@JsonTypeInfo则允许更精细的定制JSON格式,包括使用完全限定名或逻辑名,并选择类型ID的存储位置。
摘要由CSDN通过智能技术生成

Jackson数据绑定可以很方便的将java的对象类型和json数据格式之间进行转换。对于有多个子类型的多态集成结构的对象,Jackson在序列化的时候加入一些类型信息,可以在反序列化的时候准确的还原某个类型的子类。

想要把JSON数据准确的反序列化为正确的子类型,简单的方法就是在数据中存储数据的类型。但是Jackson序列化时默认不会将对象的类型信息保存到Json数据中。有两种方式开始使Jackson序列化类型信息

方式一:全局Default Typing机制

 

objectMapper.enableDefaultTyping(); // default to using DefaultTyping.OBJECT_AND_NON_CONCRETE

objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

DefaultTyping有四个选项

  • JAVA_LANG_OBJECT: 当对象属性类型为Object时生效
  • OBJECT_AND_NON_CONCRETE: 当对象属性类型为Object或者非具体类型(抽象类和接口)时生效
  • NON_CONCRETE_AND+_ARRAYS: 同上, 另外所有的数组元素的类型都是非具体类型或者对象类型
  • NON_FINAL: 对所有非final类型或者非final类型元素的数组

开启DefaultTyping,并且让所有的非final类型对象持久化时都存储类型信息显然能准确的反序列多态类型的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值