首页
学习
活动
专区
工具
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注解不仅可以加在父类的定义上面,也可以加到包含父类的成员变量上面。...序列化和反序列化的结果和第三小节中的内容是一样的。

3K10
  • 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

    46110

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

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

    22010

    C# 中的多态性

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

    67020

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

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

    1.5K61

    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

    1.1K40

    鸭子类型:Python中的灵活多态性

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

    43940

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

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

    2K30

    springboot中jackson的yml配置

    生命是短暂的,如果我能让别人以更短的时间,看到更多的美,这难道不是一件值得奋斗的事情吗?...——灵遁者 配置如下: 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.9K10

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

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

    2.8K40

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

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

    5.5K10

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券