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

如何从父对象确定Jackson多态反序列化的类型

从父对象确定Jackson多态反序列化的类型可以通过以下方式:

  1. 使用@JsonTypeInfo注解:Jackson库提供了@JsonTypeInfo注解来标识父对象的多态类型信息。通过在父类上添加该注解,可以指定多态类型信息的使用方式和名称。该注解有多个配置选项,可以根据具体情况选择合适的配置。例如,可以使用@JsonTypeInfo注解的use属性来指定类型信息的使用方式,常见的值有JsonTypeInfo.Id.CLASS(使用类的全限定名作为类型信息)、JsonTypeInfo.Id.NAME(使用类的名称作为类型信息)等。此外,@JsonTypeInfo注解还可以使用@JsonSubTypes注解来指定可用的子类型。

示例代码:

代码语言:txt
复制
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "type")
public class ParentObject {
    ...
}

// 子类必须添加@JsonTypeName注解来指定类型名称
@JsonTypeName("childObject")
public class ChildObject extends ParentObject {
    ...
}
  1. 配置ObjectMapper:ObjectMapper是Jackson库中的一个核心类,用于进行序列化和反序列化操作。可以通过配置ObjectMapper来确定多态类型的反序列化方式。具体来说,可以使用ObjectMapper的enableDefaultTyping方法来启用多态类型信息的反序列化,同时指定使用哪种类型信息的使用方式。例如,可以使用ObjectMapper.DefaultTyping.NON_FINAL参数来指定使用非最终类作为类型信息。

示例代码:

代码语言:txt
复制
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

在上述两种方式中,为了正确地将父对象反序列化为正确的子类型,需要保证序列化和反序列化的对象的结构和类型信息是匹配的。

推荐的腾讯云相关产品:腾讯云对象存储(COS)。 腾讯云对象存储(COS)是一种高可扩展、低成本、持久化存储的云存储服务。它可以存储和检索任意类型的数据,适用于各种场景,如网站托管、备份和归档、大数据分析等。腾讯云对象存储(COS)具有高可靠性、高可用性、高性能和高安全性的特点。您可以通过以下链接了解更多腾讯云对象存储(COS)的相关信息:

请注意,以上答案仅为参考,并不能涵盖所有可能的情况和产品。具体使用时,建议根据实际需求和情况选择合适的方法和产品。

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

相关·内容

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

有的小伙伴以为Jackson只能在Spring框架内使用,其实不是的,没有这种限制。 它提供了很多的JSON数据处理方法、注解,也包括流式API、树模型、数据绑定,以及复杂数据类型转换等功能。...本篇主要介绍一下最近遇到的一个问题,在Java 类继承的情况下如何实现父类及子类的JSON序列化与反序列化。...@JsonTypeInfo注解加到父类定义上 为了解决上面的这种继承关系对象的反序列化出现的问题,jackson为我们提供了JsonTypeInfo注解,把它加在父类定义上面即可。...值得注意的是在序列化之后的java字符串中,每个Json对象都包含了一个新的属性@class,这也是该对象在继承关系下能够反序列化为正确的java对象(@class的值的类对象)的关键所在。...原文地址:如何通过Jackson注解@JsonTypeInfo解决多态反序列化问题?

5.5K10

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

若一直向入参中新增字段(不满足开闭原则)就会导致后期的不可维护性。 方案一:Controller层接收的是String类型,然后通过手动的方式来进行反序列化为子类对象。...方案二:使用Jackson的多态处理。 1....允许配置多态处理,当进行反序列化时,JSON数据匹配的对象可能有多个子类型,为了正确的读取对象的类型,我们需要添加一些类型信息。...visible(可选,默认为false):是否可见 属性定义了类型标识符的值是否会通过JSON流成为反序列化器的一部分,默认为fale,也就是说,jackson会从JSON内容中处理和删除类型标识符再传递给...智能版:扩展@JsonTypeIdResolver的使用 Jackson 多态序列化可以通过@JsonSubtypes来实现,但总觉得不是很方便,比如新增子类的时候都要去加一下JsonSubTypes

2.8K40
  • Jackson常用注解详解1 初级2 中级

    在有些情况下,Jackson在读入或输出一个成员属性时,所选用的类型可能并不是你想要的: 当读取(反序列化)时,声明的类型可能是一个基本类型,但是你确切地知道应该使用的实现类型(ps:也就说,我们需要反序列化后生成的对象是实现类型的...) 当输出(序列化)时,Jackson默认使用的是给定的运行时类型;但是你可能不想输出那个类型的所有信息,而仅仅是它的父类型所囊括的信息。...在这些应用场景,你可以使用如下的注解进行处理: public class ValueContainer { // 虽然代码中使用的类型是 Value, 但我们希望读取到的JSON 之后得到的对象的类型是...②处理多态类型(polymorphic types) 如果你要进行读取、输出操作的对象拥有许多可能的子类型(即表现出多态性),你可能还需要添加一些类型信息。...Jackson在反序列化时(读取JSON数据,生成相应的对象)需要这些信息,以便能正确地读取对象的类型。

    1.5K61

    (63) 实用序列化: JSONXMLMessagePack 计算机程序的思维逻辑

    ,另一个是反序列化后的对象类型,这里是Student.class,输出为: Student [name=张三, age=18, score=80.9] 说明反序列化的结果是正确的,除了接受文件,还可以是字节数组...,默认情况下,Jackson假定对象类型有一个无参的构造方法,它会先调用该构造方法创建对象,然后再解析输入源进行反序列化。...我们看一些典型的场景: 如何达到类似标准序列化中transient关键字的效果,忽略一些字段?...在标准序列化中,可以自动处理引用同一个对象、循环引用的情况,反序列化时,可以自动忽略不认识的字段,可以自动处理继承多态,但Jackson都不能自动处理,这些情况都需要进行配置 标准序列化的结果是二进制、...小结 本节介绍了如何使用Jackson来实现JSON/XML/MessagePack序列化,使用方法是类似的,主要是创建的ObjectMapper对象不一样,很多情况下,不需要做额外配置,但也有很多情况

    4.9K80

    在Scala项目中使用Spring Cloud

    不过仍然有几点需要注意,这些方面包括: Maven依赖 Spring的语法 Json的序列化 Maven依赖 在Scala项目中,如果仍然使用Maven管理依赖,则它与在Java项目中添加Spring...而对于Spring Boot的Controller,在语法上有少许差异,即在值中要使用Scala的Array类型,例如 @RestController @RequestMapping(Array("/"...} Json的序列化 添加依赖 Spring Boot使用Jackson作为Json的序列化支持,若要在Scala项目也要使用Jackson,则需要添加jackson对scala的支持模块: 的类型就是前面提及的表达式树,它对应的Json结构需要支持Json类型的多态,即前面代码所示的ConditionExpression抽象类型,子类ConditionGroup与Condition拥有不同的属性定义...要支持这种Json的多态,则必须在抽象类型ConditionExpression上添加如下annotation: @JsonTypeInfo( use = JsonTypeInfo.Id.NAME,

    1.7K50

    在 .NET 对象和 JSON 互相序列化的时候,枚举类型如何设置成字符串序列化,而不是整型?

    默认情况下,Newtonsoft.Json 库序列化和反序列化 JSON 到 .NET 类型的时候,对于枚举值,使用的是整数。...然而,在公开 JSON 格式的 API 时,整数会让 API 不易于理解,也不利于扩展和兼容。 那么,如何能使用字符串来序列化和反序列化 JSON 对象中的枚举呢?...None, ABit, Normal, Very, Extreme, } } 对于“逗比程度”枚举,增加了转换器后,这个对象的序列化和反序列化将成...当然,如果你希望属性名也小写的化,需要加上额外的序列化属性: 1 2 3 4 5 6 7 8 9 10 11 12 13 ++ using System.Runtime.Serialization;...,同时有更好的阅读体验。

    75540

    用了几年的 Fastjson,最终替换成了 Jackson!

    @JSONPOJOBuilder 指定反序列化时创建 java 对象使用的 build 方法,对应 jackson 的@JsonPOJOBuilder。...@JSONCreator 指定反序列化时创建 java 对象使用的构造方法,对应 jackson 的@JsonCreator。 @JSONField 指定序列化和反序列化 field 时的行为。...// 反序列化多态类型时,如果根据其他typeName等方式无法找到正确的子类时,默认使用的子类,等价于jackson的@JsonTypeInfo.defaultImpl() Class builder() default Void.class; // 声明这个类型的别名,反序列化多态类型时使用,等价于jackson的@JsonTypeName String...如果想完全不改上层代码,那也可以参考 jackson-datatype-json-org 和 jackson-datatype-json-lib 自己实现 jackson 对 fastjson 的数据类型的

    2.3K30

    穿越到东汉末年的Jackson

    它也可以用于将JSON字符串转换为等效的Java对象。Gson可以处理任意Java对象,包括您没有源代码的预先存在的对象。...比如guava中定义的数据类型,比如kotlin语言Immutable的类型等,比如java8 引入的新日期时间类型和Optional都已经有支持的模块。...我们将使用 @JsonSerialize通过CustomDateSerializer序列化eventDate属性: image.png 这是简单的自定义 Jackson 序列化程序: image.png...让我们通过一个简单的例子来看看这个注解是如何工作的: image.png 这里我们有一个 POJO,我们想将带有fName、f_name和firstName 等值的JSON 反序列化到 POJO的firstName...); // 设置Date类型的序列化及反序列化格式 om.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"

    2K20

    解决:JSON parse: Cannot deserialize value of type ‘XXX‘ from Array value (token `JsonToken.START_ARRRA

    然而,将JSON数据转化为特定的对象类型时,可能会遭遇类型不匹配的问题,尤其是在处理数组值时。本文将深入探讨如何在JSON解析过程中有效地解决这类类型不匹配问题。...仔细审视数据层次和嵌套,确保预期的类型‘XXX’与数组值的层级关系正确匹配。 明确定义目标类型:务必在代码中明确定义类型‘XXX’,并且将其与 JSON 数据的结构相对应。...这种做法避免了直接尝试将整个对象反序列化为类型 ‘XXX’,而是根据实际数据结构逐步处理。...通过以上对比,您可以更好地理解在遇到类型不匹配错误时如何修改代码,以及如何根据 JSON 数据的实际结构来进行逐步解析。这有助于更准确地处理 JSON 解析中的问题。...通过深入分析数据结构,定义目标类型,选择适用的解析库,以及编写必要的解析逻辑,您可以有效地解决这类问题,确保JSON数据在反序列化时正确地映射到目标类型。 参考资料: Jackson官方网站

    69310

    用了几年的 Fastjson,我最终替换成了Jackson!

    [123,"xxx"] SerializerFeature.BeanToArray 关闭 - - 非标准特性,jackson并不支持 序列化Map时将非String类型的key作为String类型输出,...@JSONPOJOBuilder 指定反序列化时创建java对象使用的build方法,对应jackson的@JsonPOJOBuilder。最新 Java 核心技术教程,都在这了。...@JSONCreator 指定反序列化时创建java对象使用的构造方法,对应jackson的@JsonCreator。 @JSONField 指定序列化和反序列化field时的行为。...字母顺序排序,等价于jackson的@JsonPropertyOrder.alphabetic() boolean alphabetic() default true; // 反序列化多态类型时...> builder() default Void.class; // 声明这个类型的别名,反序列化多态类型时使用,等价于jackson的@JsonTypeName String typeName

    5.5K10

    都是微服务的天下了,还有不知道 JSON 的程序员吗?

    1.2.4 字符串   字符串(string)是由双引号包围的任意数量 Unicode 字符的集合,使用反斜线转义。...若为作用在 set/get 方法上,反序列化时不会赋值给属性 format 用在 Date 类型的字段来格式化时间格式 serialize、deserialize 布尔类型, 在序列化的时候就不包含这个字段了...serialzeFeatures fastjson 默认的序列化规则是当字段的值为 null 的时候,是不会序列化这个字段 1.3.2 Jackson   Jackson 是当前用的比较广泛的,用来序列化和反序列化...JsonInclude.Include.NON_NULL:属性为 null 不参与序列化 @JsonProperty 属性使用的注解,用来表示外部属性名字,就是使用别名序列化,而不是对象的名字。...value: 指你需要指定的名字 @JsonFormat 实体类/属性使用的注解,在序列化或者反序列化的时候,指定属性格式化日期/时间 1.3.3 一些对象的 JSON 字符串格式 ☞ JavaBean

    4.5K20

    6. 二十不惑,ObjectMapper使用也不再迷惑

    内容 使用Feature进行定制 使用可插拔com.fasterxml.jackson.databind.Module模块来扩展/丰富功能 它还支持更高级的对象概念:比如多态泛型、对象标识 它还充当了更为高级...小贴士:树模型会单独成文介绍,体现出它的重要性 写(序列化) 提供writeValue()系列方法用于写数据(可写任何类型),也就是我们常说的序列化。 ?...--------写POJO---------- {"name":"A哥","age":18} 读(反序列化) 提供readValue()系列方法用于读数据(一般读字符串类型),也就是我们常说的反序列化。...readValue(String content, Class valueType):读为指定class类型的对象,此方法最常用 readValue(String content, TypeReference...对于泛型擦除情况,解决思路是hold住泛型类型,这样反序列化的时候才不会抓瞎。但凡只要一抓瞎,Jackson就木有办法只能采用通用/默认类型去装载喽。

    1.2K10

    6. 二十不惑,ObjectMapper使用也不再迷惑

    JSON内容 - 使用Feature进行定制 - 使用可插拔com.fasterxml.jackson.databind.Module模块来扩展/丰富功能 它还支持更高级的对象概念:比如多态泛型...小贴士:树模型会单独成文介绍,体现出它的重要性 写(序列化) 提供writeValue()系列方法用于写数据(可写任何类型),也就是我们常说的序列化。...--------写POJO---------- {"name":"A哥","age":18} 读(反序列化) 提供readValue()系列方法用于读数据(一般读字符串类型),也就是我们常说的反序列化。...[2020072816260696.png] readValue(String content, Class valueType):读为指定class类型的对象,此方法最常用 readValue(...对于泛型擦除情况,解决思路是hold住泛型类型,这样反序列化的时候才不会抓瞎。但凡只要一抓瞎,Jackson就木有办法只能采用通用/默认类型去装载喽。

    1.7K30

    JSON 多态反序列化属性类型丢失问题

    一、背景 工作中有时候会遇到一个类定义了某个类型的父类作为成员变量,实际存放的为某个子类型, JSON 反序列化后,属性丢失的情况。 如果你赶时间,可以直接跳到第三部分看解决方案。...=Parent(name=张三, sex=男)) 这样存在的问题: 1、有时候我们会依据 Parent 的具体子类型来执行不同的策略,由于无法确定类型,给我们的编码带来了困扰 2、反序列化时,由于无法感知序列化时...Parent 类的具体类型,反序列化丢失了 other 成员变量的值。...三、解决办法 3.1 将子类型写入 JSON 字符串 先说一个常规做法。 如果我们在序列化时将具体的子类型写入到 JSON 字符串中,反序列化时就可以使用该子类型对其进行反序列化。...四、总结 本文主要讲 JSON 多态反序列化属性或类型丢失问题,并提供了几种解决方案,希望对大家有帮助。

    4.4K20

    Redis 与序列化

    优点是反序列化时不需要提供类型信息(class),但缺点是需要实现Serializable接口,还有序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存。...Jackson2JsonRedisSerializer:使用Jackson库将对象序列化为JSON字符串。优点是速度快,序列化后的字符串短小精悍,不需要实现Serializable接口。...但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。通过查看源代码,发现其只在反序列化过程中用到了类型信息。...问题:使用默认的JDK序列化方式,在RDM工具中查看k-v值时会出现“乱码”,不方便查看。 解决:自定义系列化方式,使用Jackson2JsonRedisSerializer ?...你也可以用 StringRedisTemplate,那么你 set 的所有数据都会被 toString 一下再存到 redis 里。但这个 toString 不一定能反解析的回来。

    2.2K40

    面向对象是面试时提问最多的吗?

    (理解的回答) 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。 面向对象有三大特征:封装性、继承性、多态性。...5、面向对象的特征有哪些方面? 主要有封装,继承,多态。如果是 4 个方面则加上:抽象。...多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法...8、如何重载父类的方法,举例说明 重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。...__sleep () 使用 serialize 序列化时候调用。 __wakeup () 使用 unserialize 反序列化的时候调用。 __call () 调用一个不存在的方法的时候调用。

    49320

    2019-PHP面试题大全【面向对象部分】

    面向对象有三大特征:封装性、继承性、多态性。 现在纯正的OO语言主要是 Java 和 C#,PHP、C++也支持OO,C是面向过程的。...5、面向对象的特征有哪些方面? 主要有封装,继承,多态。如果是4个方面则加上:抽象。...多态: 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法...8、如何重载父类的方法,举例说明 重载,即覆盖父类的方法,也就是使用子类中的方法替换从父类中继承的方法,也叫方法的重写。...__sleep() 使用serialize序列化时候调用。 __wakeup() 使用unserialize反序列化的时候调用。 __call() 调用一个不存在的方法的时候调用。

    44230

    Jackson用法详解

    , false); 12、不允许基本类型为null 如果JSON字符串包含其值设置为null的字段(对于在相应的Java对象中是基本数据类型(int,long,float,double等)的字段),Jackson...但是,Jackson还支持将日期格式化为字符串。 1、Date-->long 默认的Jackson日期格式,该格式将Date序列化为自1970年1月1日以来的毫秒数(long类型)。...此Jackson JsonNode教程还将说明如何从头开始构建JsonNode对象图,因此以后可以将它们序列化为JSON。...此Jackson注解教程介绍了如何使用Jackson的注解。 下面是一些常用的注解: 注解 用法 @JsonProperty 用于属性,把属性的名称序列化时转换为另外一个名称。...这样做会使deserialize()方法返回一个布尔对象。 如果要反序列化其他类型(例如java.util.Date),则必须在泛型括号内指定该类型。

    15.4K21

    Jackson 中使用 Optional

    针对上面的问题,本文会将会介绍在 Jackson 中如何处理 Optional 对象,和如果 Optional 对象可能出现潜在的 Null 的解决方案。...问题概览首先让我们来看看如果使用 Jackson 来对 Optional 数据类型进行序列化和反序列化中出现的问题。Maven 依赖针对 Jackson,我们可以使用最新的版本。...Optional 对象设置值的方式,因为不同的值会影响序列化和反序列化的情况。...针对上面的要求,Jackson 已经提供了解决方案,Jackson 针对 JDK8 的新增模块设置了一系列数据类型,这里就包括了 Optional。...Jackson 需要注册一个新的 jdk8 数据类型才能对数据进行处理。因为 Optional 是 JDK 8 中提供的新的数据特性,因此我们对一些新的数据类型我们需要有一些了解。

    15910
    领券