首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jackson注释中的多态性:@JsonTypeInfo用法

在Jackson JSON处理库中,@JsonTypeInfo注解用于处理JSON序列化和反序列化过程中的多态性问题。多态性是指在Java对象序列化为JSON字符串时,保留对象的类型信息,以便在反序列化时能够正确地恢复对象的类型。

@JsonTypeInfo注解有以下属性:

  1. use:表示类型信息的包含方式,可以取值为以下三种方式:
  • NONE:不包含类型信息
  • CLASS:包含Java类的全限定名
  • MINIMAL_CLASS:包含Java类的简短名称
  1. include:表示类型信息的包含位置,可以取值为以下三种位置:
  • WRAPPER_OBJECT:包含在一个外层的JSON对象中
  • PROPERTY:包含在当前JSON对象的一个属性中
  • EXTERNAL_PROPERTY:包含在一个外层的JSON对象的一个属性中
  1. property:表示存储类型信息的属性名称,默认值为"@class"。
  2. defaultImpl:表示默认的反序列化实现类,当JSON字符串中不包含类型信息时,将使用该默认实现类进行反序列化。

使用@JsonTypeInfo注解可以解决JSON序列化和反序列化中的多态性问题,例如:

代码语言:java
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
public class Animal {
    public String name;
}

public class Dog extends Animal {
    public String breed;
}

public class Cat extends Animal {
    public int lives;
}

在上述示例中,Animal类使用@JsonTypeInfo注解来包含类型信息,当序列化Animal的子类Dog和Cat时,JSON字符串中将包含类型信息,例如:

代码语言:json
复制
{
  "@class": "com.example.Dog",
  "name": "Rufus",
  "breed": "Golden Retriever"
}

在反序列化时,Jackson将根据类型信息正确地恢复对象的类型。

推荐的腾讯云相关产品:

  • 腾讯云对象存储(COS):提供高可靠、低成本、弹性可扩展的云存储服务,可以用于存储和管理多媒体文件。
  • 腾讯云内容分发网络(CDN):通过全球节点加速多媒体内容的分发和传输,提高用户访问速度和体验。
  • 腾讯云直播:提供实时音视频采集、推流、转码、分发、录制等全套直播解决方案。

产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

除了FastJson,你还有选择: Gson简易指南

这个周末被几个技术博主的同一篇公众号文章 fastjson又被发现漏洞,这次危害可导致服务瘫痪! 刷屏,离之前的漏洞事件没多久,FastJson 又出现严重 Bug。目前项目中不少使用了 FastJson 做对象与JSON数据的转换,又需要更新版本重新部署,可以说是费时费力。与此同时,也带给我新的思考,面对大量功能强大的开源库,我们不能盲目地引入到项目之中,众多开源框架中任一个不稳定因素就足以让一个项目遭受灭顶之灾。趁着周末,在家学习下同样具备对象JSON相互转换功能的优秀开源框架 Gson,并且打算将今后项目使用 FastJson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。

03

除了FastJson,你还有选择: Gson简易指南

前几天被几个技术博主的同一篇公众号文章 fastjson又被发现漏洞,这次危害可导致服务瘫痪! 刷屏,离之前漏洞事件没多久,fastjson 又出现严重 Bug。目前项目中不少使用了 fastjson 做对象与JSON数据的转换,又需要更新版本重新部署,可以说是费时费力。与此同时,也带给我新的思考,面对大量功能强大的开源库,我们不能盲目地引入到项目之中,众多开源框架中某个不稳定因素就足以让一个项目遭受灭顶之灾。趁着周末,在家学习下同样具备JSON与对象转换功能的优秀开源框架 Gson,并且打算将今后项目使用 fastjson 的地方逐渐换成使用 Gson,记录下学习总结的内容,希望对小伙伴也有所帮助。

04
领券