首页
学习
活动
专区
工具
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):通过全球节点加速多媒体内容的分发和传输,提高用户访问速度和体验。
  • 腾讯云直播:提供实时音视频采集、推流、转码、分发、录制等全套直播解决方案。

产品介绍链接地址:

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

相关·内容

Jaskson精讲第7篇-JsonTypeInfo注解在类继承关系下使用

《序列化与反序列化核心用法-JSON框架Jackson精解第1篇》 《特殊数据格式处理-JSON框架Jackson精解第2篇》 《属性序列化自定义排序与字母表排序-JSON框架Jackson精解第3篇》...三、@JsonTypeInfo注解加到父类定义上 为了解决上面的这种继承关系对象反序列化出现问题,jackson为我们提供了JsonTypeInfo注解,把它加在父类定义上面即可。...java字符串,每个Json对象都包含了一个新属性@class,这也是该对象在继承关系下能够反序列化为正确java对象(@class类对象)关键所在。...四、@JsonTypeInfo注解加到包含父类成员变量上面 @JsonTypeInfo注解不仅可以加在父类定义上面,也可以加到包含父类成员变量上面。...序列化和反序列化结果和第三小节内容是一样

2.7K10

Python 多态性示例和类继承多态性

单词 "多态" 意味着 "多种形式",在编程,它指的是具有相同名称方法/函数/操作符,可以在许多不同对象或类上执行。...函数多态性 一个示例是 Python len() 函数,它可以用于不同对象。 字符串 对于字符串,len() 返回字符数量: 示例 x = "Hello World!"...print(len(x)) 元组 对于元组,len() 返回元组数量: 示例 mytuple = ("apple", "banana", "cherry") print(len(mytuple)...} print(len(thisdict)) 类多态性 多态性通常在类方法中使用,其中我们可以具有相同方法名称多个类。...由于多态性,我们可以为所有三个类执行相同方法。 继承类多态性 那么具有相同名称子类类呢?我们能在那里使用多态吗?

18110

Java注释@interface用法

(字节码文件)当程序编译时,但不会被虚拟机读取在运行时候; 用@Retention(RetentionPolicy.SOURCE )修饰注解,表示注解信息会被编译器抛弃,不会留在class文件...,注解信息只会留在源文件; 用@Retention(RetentionPolicy.RUNTIME )修饰注解,表示注解信息被保留在class文件(字节码文件)当程序编译时,会被虚拟机保留在运行时...RetentionPolicy.RUNTIME 可以让你从JVM读取Annotation注解信息,以便在分析程序时候使用. package com.self; import java.lang.annotation.Retention...lannotation() default @TestAnnotation(value = "ddd"); Class style() default String.class; } 上面程序,...可见,@Retention(RetentionPolicy.RUNTIME )注解,RetentionPolicy.RUNTIME是注解属性值,属性名字是value, 属性返回类型是RetentionPolicy

43110

C# 多态性

相信大家都对面向对象三个特征封装、继承、多态很熟悉,每个人都能说上一两句,但是大多数都仅仅是知道这些是什么,不知道 CLR 内部是如何实现,所以本篇文章主要说说多态性一些概念已经内部实现机理。...一、多态概念 首先解释下什么叫多态:同一操作作用于不同对象,可以有不同解释,产生不同执行结果,这就是多态性。换句话说,实际上就是同一个类型实例调用"相同"方法,产生结果是不同。...因为Cat类型是Animal类型派生类,所以这种转换没有问题。这也是多态性重点。...这个也就是多态性体现:同一操作作用于不同对象,可以有不同解释,产生不同执行结果。...下面我们就来深入一点,谈谈多态背后机理。 ---- 二、深入理解多态性 要深入理解多态性,就要先从值类型和引用类型说起。我们都知道值类型是保存在线程栈上,而引用类型是保存在托管堆

63120

Jackson常用注解详解1 初级2 中级

extra" : "fluffy", "uselessValue" : -13 } 最后,你甚至能简单地忽略掉从JSON(由于在应用没有完全匹配POJO)获得所有“多余”属性。...,Jackson尝试使用该类“默认”构造器(即无参数构造器)。...②处理多态类型(polymorphic types) 如果你要进行读取、输出操作对象拥有许多可能子类型(即表现出多态性),你可能还需要添加一些类型信息。...Jackson在反序列化时(读取JSON数据,生成相应对象)需要这些信息,以便能正确地读取对象类型。...我们可以通过在“基本类型”上添加@JsonTypeInfo注解来完成操作: //将Java类名称(“com.myempl.ImplClass”)存储到JSON一个名称为“class”属性 @JsonTypeInfo

1.4K61

Java Jackson readTree

可能老项目还在使用 XML,这个不在我们这篇文章讨论范围内。 在 JAVA 程序,如果要对 JSON 数据进行处理,通常就会涉及到 JSON 数据转换和解析。...使用包 有多种包可以来进行使用,目前使用最多Jackson,同时 Gson 也在使用,更新频率也比较不错。 Json-lib 已经不更新了,可以取代是 JSON in Java。...从 Maven 仓库,可以看到 Jackson Databind 是使用最多库。 解析 当我们拿到一个 JSON 字符串时候,我们通常需要进行解析。...node 后,我们会看到你 node 对象内容为: 这和你输入 JSON 数据格式内容是对应。...你可以使用上面的方法不停 get,get 再 get。 https://www.ossez.com/t/java-jackson-readtree/13846

93340

鸭子类型:Python灵活多态性

引言在Python编程世界,有一种特殊类型,被戏称为“鸭子类型”。这个概念源自一句格言:“如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。”...这种理念在Python得以充分体现,它让我们在编写代码时更加关注对象行为,而不是对象类型。本文将深入探讨鸭子类型在Python应用,以及如何利用这一特性编写更加灵活、可复用代码。1....鸭子类型基本概念在鸭子类型,对象类型是由它行为决定,而不是由它类或接口决定。...3.2 鸭子类型与迭代器在Python,迭代器是鸭子类型一个典型应用。迭代器对象必须实现__iter__()和__next__()方法,但不需要显式地继承任何特定接口或类。...在你Python编程旅程,不妨多多尝试鸭子类型,体验它便利之处。无论是函数参数、迭代器还是其他场景,鸭子类型都可以为你代码带来更多可能性。希望本文对你理解鸭子类型有所帮助。

29740

Jackson父子类多态处理(注解实现)

方案二:使用Jackson多态处理。 1....作为数据兄弟属性 JsonTypeInfo.As.EXISTING_PROPERTY 作为POJO已经存在属性,需要手动set JsonTypeInfo.As.EXTERNAL_PROPERTY...visible(可选,默认为false):是否可见 属性定义了类型标识符值是否会通过JSON流成为反序列化器一部分,默认为fale,也就是说,jackson会从JSON内容处理和删除类型标识符再传递给...值是一个@JsonSubTypes.Type[]数组,里面枚举了多态类型(value对应子类)和类型标识符值(name对应@JsonTypeInfoproperty标识名称值,此为可选值。...智能版:扩展@JsonTypeIdResolver使用 Jackson 多态序列化可以通过@JsonSubtypes来实现,但总觉得不是很方便,比如新增子类时候都要去加一下JsonSubTypes

2K40

如何通过Jackson注解@JsonTypeInfo解决多态反序列化问题?

Jackson是Spring Boot(SpringBoot)默认JSON数据处理框架,但是其并不依赖于任何Spring 库。...@JsonTypeInfo注解加到父类定义上 为了解决上面的这种继承关系对象反序列化出现问题,jackson为我们提供了JsonTypeInfo注解,把它加在父类定义上面即可。...值得注意是在序列化之后java字符串,每个Json对象都包含了一个新属性@class,这也是该对象在继承关系下能够反序列化为正确java对象(@class类对象)关键所在。...也就是说,在上面的代码,当我们将其用于“shapes”list时,它是应用于list里每个元素(shape),而不是list类型本身。...原文地址:如何通过Jackson注解@JsonTypeInfo解决多态反序列化问题?

4.2K10

springbootjacksonyml配置

生命是短暂,如果我能让别人以更短时间,看到更多美,这难道不是一件值得奋斗事情吗?...——灵遁者 配置如下: spring: jackson: # 日期序列化格式 date-format: yyyy-MM-dd HH:mm:ss # 序列化和反序列化属性配置...,默认是保留字段名称,并从方法删除 set/get/is 前缀(以及小写首字母大写字符序列) property-naming-strategy: com.fasterxml.jackson.databind.PropertyNamingStrategy...GETTER: PUBLIC_ONLY # 所有的SETTER都设置为只有公共可见 SETTER: PUBLIC_ONLY # 所有的CREATOR都设置为除了PRIVATE都可见...PUBLIC_ONLY # 所有访问器都受到影响 ALL: DEFAULT # 序列化配置,有多个 serialization: # 底层格式化序列后JSON

1.7K10

上篇|Jackson注解用法和场景,不看巨亏

ackson注解一览 今天总结一下Jackson一系列注解用法和场景,或许能帮助你实现一些功能,总结不易,还请多多关注、点赞、转发。...@JacksonAnnotation 这个注解经常用于Jackson自定义注解,用来标记这是一个Jackson注解,这个胖哥在Jackson脱敏一文中用过它来实现自定义序列化注解。...这种情况下,jackson其它一些静态注解就很难实现,借助于@JsonFilter反而简单了,下面是实现方法: // 只序列化age策略 @JsonFilter("role_a") public class...小结 Jackson是一款非常优秀json类库,提供了丰富注解来满足各种场景需要。本篇介绍了一部分注解用法和场景。...另外keycloak教程也在准备,还请多多关注和支持。

1.8K30
领券