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

我能用jackson序列化基于外部键的子类吗?

是的,您可以使用Jackson序列化基于外部键的子类。

Jackson是一个流行的Java库,用于处理JSON数据。它提供了强大的序列化和反序列化功能,可以轻松地将Java对象转换为JSON格式,并且支持复杂的对象关系。

当涉及到基于外部键的子类时,Jackson提供了多种处理方式。您可以使用@JsonTypeInfo注解来指定子类的类型信息,以便在序列化和反序列化过程中正确地处理对象的类型。

下面是一个示例代码,演示了如何使用Jackson序列化基于外部键的子类:

代码语言:txt
复制
public class ParentClass {
    private String id;
    private ChildClass child;

    // getters and setters
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = ChildClass1.class, name = "child1"),
    @JsonSubTypes.Type(value = ChildClass2.class, name = "child2")
})
public abstract class ChildClass {
    // common properties and methods
}

public class ChildClass1 extends ChildClass {
    // additional properties and methods specific to ChildClass1
}

public class ChildClass2 extends ChildClass {
    // additional properties and methods specific to ChildClass2
}

在上面的代码中,ParentClass包含一个ChildClass类型的属性。通过在ChildClass上使用@JsonTypeInfo注解,我们指定了子类的类型信息。@JsonSubTypes注解用于指定子类的具体类型。

使用Jackson进行序列化时,可以将ParentClass对象转换为JSON字符串:

代码语言:txt
复制
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(parentObject);

反序列化时,可以将JSON字符串转换回ParentClass对象:

代码语言:txt
复制
String json = "{\"id\":\"123\",\"type\":\"child1\",\"child\":{\"property\":\"value\"}}";
ParentClass parentObject = mapper.readValue(json, ParentClass.class);

在这个例子中,我们使用了ChildClass1作为子类的示例,但您也可以使用ChildClass2或其他基于外部键的子类。

对于腾讯云相关产品和产品介绍链接地址,由于您要求不提及具体品牌商,我无法提供相关链接。但腾讯云提供了丰富的云计算服务,您可以访问腾讯云官方网站,了解更多关于云计算的信息和产品介绍。

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

相关·内容

java typereference_Java泛型 | Jackson TypeReference获取泛型类型信息「建议收藏」

大家好,又见面了,是你们朋友全栈君。 前言 Jackson是一个比较流行Json序列化和反序列化框架。...本文以Jackson为例介绍TypeReference实现涉及泛型序列化,及TypeReference实现原理。...对于获取泛型类型信息场景,TypeReference是一个可以参考通用解决方案。 实例 Jackson ObjectMapperreadValue可以将Json字符串反序列化为Java对象。...理想实现方式是告诉ObjectMapperreadValue方法,是List,帮我反序列化成这个类型。...换一种方式实现 既然不能用List.class, 那如果告诉ObjectMapperreadValue方法,是List类型,但返回值类型是List, 会发生什么呢?

2.5K10
  • 用了几年 Fastjson,最终替换成了 Jackson

    框架默认使用 jackson,因此最终选择使用 jackson。...以下步骤源码分析基于以下版本: fastjson v1.2.60 jackson-core v2.9.9 jackson-annotations v2.9.0 jackson-databind v2.9.9.3...// 反序列化多态类型时,如果根据其他typeName等方式无法找到正确子类时,默认使用子类,等价于jackson@JsonTypeInfo.defaultImpl() Class<?...typeName() default ""; // 反序列化某个接口或抽象类或父类子类时指定根据哪个字段值和子类typeName相等来决定具体实现类,等价于jackson@JsonTypeInfo.use...() = Id.CUSTOM + @JsonTypeInfo.property() String typeKey() default ""; // 反序列化某个接口或抽象类或父类子类时指定可以反序列化子类类型

    2.2K30

    Jackson行为特征SerializationFeature和DeserializationFeature【收藏】

    1️⃣ 前言 在使用Jackson序列化和反序列化时候,一般会设置一些相关特性,例如下面这样代码: ObjectMapper objectMapper = new ObjectMapper();...5 、FAIL_ON_READING_DUP_TREE_KEY:在读取重复树节点时抛出异常。用于确保树形结构中每个都是唯一。...用于检测是否有未处理属性。 10 、FAIL_ON_INVALID_SUBTYPE:在找不到合适子类型时抛出异常。用于确保在反序列化时能够正确匹配子类型。...10、 WRITE_ENUM_KEYS_USING_INDEX:对枚举类型进行序列化时,使用枚举值索引而不是名称。...16、 WRITE_DATE_KEYS_AS_TIMESTAMPS:将日期类型序列化为时间戳形式。

    29210

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

    serialzeFeatures fastjson 默认序列化规则是当字段值为 null 时候,是不会序列化这个字段 1.3.2 Jackson   Jackson 是当前用比较广泛,用来序列化和反序列化...☞ 导包 jackson-core 核心包,提供基于"流模式"解析相关 API,它包括 JsonPaser 和 JsonGenerator。...jackson-annotations 注解包,提供标准注解功能; jackson-databind 数据绑定包, 提供基于"对象绑定" 解析相关 API (ObjectMapper) 和"树模型"...解析相关 API(JsonNode);基于"对象绑定" 解析 API 和"树模型"解析 API 依赖基于"流模式"解析 API。...JsonInclude.Include.NON_NULL:属性为 null 不参与序列化 @JsonProperty 属性使用注解,用来表示外部属性名字,就是使用别名序列化,而不是对象名字。

    4.5K20

    java进阶|Springboot整合Redis+Aop+自定义注解实现数据埋点操作

    redisTemplate.setHashKeySerializer(stringRedisSerializer); //value序列化方式采用jackson redisTemplate.setValueSerializer...(jackson2JsonRedisSerializer); //hashvalue序列化方式采用jackson redisTemplate.setHashValueSerializer...; }} 四,基于redis配置类,这里封装了一下常用操作redis工具类,代码如下,需要可以看下,本文就是基于这个redis工具类进行操作,所以很重要。...因为数据不一定是非常精确,只要误差不太大就可以了,关于如何模拟多人操作,这里自己还没有真正实操过,所以暂时不做测试分析了,这里还是继续下面的分析好了,日后写到关于这方面的操作时再进行说明一下吧...,这是其他map所不具备,所以基于其这么多优点,自己采用了redis进行数据保存,关于缺点,自己暂时先说下,因为引入了第三方依赖包,所以如何保证其高可用特性就很有必要了,后面关于redis操作

    1.2K40

    详解Jackson动态属性设置@JsonAnyGetter和@JsonAnySetter

    1️⃣ @JsonAnyGetter 注解 在 Jackson 中,@JsonAnyGetter 注解用于指示 Jackson序列化过程中取得对象动态属性方法。...> 或其子类 1.2 @JsonAnyGetter 注解使用 下面是一个示例代码,演示了如何使用 @JsonAnyGetter 注解: import com.fasterxml.jackson.annotation.JsonAnyGetter...当 Jackson 执行序列化时,它会调用带有 @JsonAnyGetter 注解方法,并将返回键值对添加到生成 JSON 中。...2.1 @JsonAnySetter 注解要求 使用 @JsonAnySetter 注解方法必须满足以下要求: 1) 方法必须是公共 2) 方法参数包括一个 String 类型和一个 Object...在反序列化过程中,Jackson 会调用带有 @JsonAnySetter 注解方法,将动态属性设置到对象 dynamicProps 属性中。

    34210

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

    一、背景 工作中有时候会遇到一个类定义了某个类型父类作为成员变量,实际存放为某个子类型, JSON 反序列化后,属性丢失情况。 如果你赶时间,可以直接跳到第三部分看解决方案。...=Parent(name=张三, sex=男)) 这样存在问题: 1、有时候我们会依据 Parent 具体子类型来执行不同策略,由于无法确定类型,给我们编码带来了困扰 2、反序列化时,由于无法感知序列化时...三、解决办法 3.1 将子类型写入 JSON 字符串 先说一个常规做法。 如果我们在序列化时将具体子类型写入到 JSON 字符串中,反序列化时就可以使用该子类型对其进行反序列化。...(name=张三, sex=男), c1Field=C1子类特有属性)) 执行 Child 子类对应策略 其他 JSON 序列化工具都有自己特定方式,大家直接参考各自官方文档即可。...个人更倾向于这种方式! 即如果 Parent 有多个了子类型,如果下游需要根据不同子类型执行不同策略。 我们可以将Parent 子类型直接定义在 Some 类中。

    4.1K20

    Jackson用树模型处理JSON是必备技能,不信你看

    但是,若有如下场景它依旧不太好实现: 硕大JSON串中只想要某一个(某几个)属性值而已 临时使用,并不想创建一个POJO与之对应,只想直接使用值即可(类型转换什么自己来就好) 数据结构高度动态化...但是,大多数修改方法都必须通过特定子类类型去调用,这其实是合理。因为在构建/修改某个Node节点时,类型类型信息一般是明确,而在读取Node节点时大多数时候并不 太关心节点类型。...值类型节点(ValueNode) 此类节点均为ValueNode子类,特点是:一个节点表示一个值。...同样,我们可从读(反序列化)、写(序列化)两个方面来展开。 写(序列化) 将Object写为JsonNode,ObjectMapper给我们提供了三个实用API俩操作它: ?...,这时候用完全数据绑定转换成POJO来操作更为方便和合理 需要1个(较少)属性值,这时候“杀鸡岂能用牛刀”呢,这种case使用树模型来做就显得更为优雅和高效了 譬如,生产者生产消息JSON串如下(模拟数据

    1.3K20

    No serializer found for class 类名 and no properties discovered to create BeanSerializer

    使用@RestController注解前台页面返回不到对象数据异常 异常信息 首页控制台会打印如下异常 com.fasterxml.jackson.databind.exc.InvalidDefinitionException...SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]) 分析 经查看 ,实体类实现了序列化...,而且导入jacksonjar包 ,controller加入了相关注解 并且在SpringCloud全局配置文件application.yml中加入了如下代码 spring: jackson...解决 在朋友帮助下 ,发现自己实体类get(), set()方法上没有加 Public修饰!!!,因为是通过快捷生成所以没注意到!!!...当局者迷,旁观者清~~~ 因为实体类不使用public 修饰, 会被默认修饰符修饰 ,只能被子类取得 ,所以在controller使用时 ,将其存入list集合也会为空值

    9.6K10

    Jackson用树模型处理JSON是必备技能,不信你看

    但是,若有如下场景它依旧不太好实现: 硕大JSON串中只想要某一个(某几个)属性值而已 临时使用,并不想创建一个POJO与之对应,只想直接使用值即可(类型转换什么自己来就好) 数据结构高度动态化...但是,大多数修改方法都必须通过特定子类类型去调用,这其实是合理。因为在构建/修改某个Node节点时,类型类型信息一般是明确,而在读取Node节点时大多数时候并不 太关心节点类型。...值类型节点(ValueNode) 此类节点均为ValueNode子类,特点是:一个节点表示一个值。...同样,我们可从读(反序列化)、写(序列化)两个方面来展开。...,这时候用完全数据绑定转换成POJO来操作更为方便和合理 需要1个(较少)属性值,这时候“杀鸡岂能用牛刀”呢,这种case使用树模型来做就显得更为优雅和高效了 譬如,生产者生产消息JSON串如下(模拟数据

    1.8K30

    SpringBoot缓存应用实践

    ////设置value序列化器 默认值是JdkSerializationRedisSerializer //使用Jackson序列化问题是,复杂对象可能序列化失败,比如JodaTime...DateTime类型 // //使用Jackson2,将对象序列化为JSON // Jackson2JsonRedisSerializer...JSON; Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON; OxmSerializer:使用Spring O/X映射编排器和解排器(marshaler...推荐将字符串使用StringRedisSerializer序列化器,因为运维时候好排查问题,JDK序列化也能识别,但是可读性稍差(是因为缓存服务器没有JRE?),见如下效果: ?...而值序列化器则要复杂多,很多人推荐使用Jackson2JsonRedisSerializer序列化器,但是实际开发过程中,经常有人碰到反序列化错误,经过排查多数都和Jackson2JsonRedisSerializer

    1.4K10

    SpringBoot-Data-Redis快速使用

    Redis概述 Redis是现在最受欢迎NoSQL数据库之一,Redis是一个使用ANSI C编写开源、包含多种数据结构、支持网络、基于内存、可选持久性键值对存储数据库,其具备如下特性: 基于内存运行...,性能高效 支持分布式,理论上可以无限扩展 key-value存储系统 开源使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化日志型、Key-Value数据库,并提供多种语言...Redis默认使用jdk序列化,一般需要使用JSON序列化,这个时候就需要自己定义一个配置类。...序列化方式采用jackson template.setValueSerializer(jackson2JsonRedisSerializer); // hash序列化也用...* * @param key Redis * @param hKey Hash * @return Hash中对象 */ public

    51850

    贼厉害,手撸 SpringBoot 缓存系统,性能杠杠

    ////设置value序列化器  默认值是JdkSerializationRedisSerializer         //使用Jackson序列化问题是,复杂对象可能序列化失败,比如JodaTime...DateTime类型         //        //使用Jackson2,将对象序列化为JSON         //        Jackson2JsonRedisSerializer...JSON;Jackson2JsonRedisSerializer:使用Jackson 2,将对象序列化为JSON;OxmSerializer:使用Spring O/X映射编排器和解排器(marshaler...推荐将字符串使用StringRedisSerializer序列化器,因为运维时候好排查问题,JDK序列化也能识别,但是可读性稍差(是因为缓存服务器没有JRE?)...,见如下效果: 编辑搜图 请点击输入图片描述 而值序列化器则要复杂多,很多人推荐使用Jackson2JsonRedisSerializer序列化器,但是实际开发过程中,经常有人碰到反序列化错误,经过排查多数都和

    87820

    除了闹过腥风血雨fastjosn,你还知道哪些Java解析JSON利器?

    于是撸起裤脚开始了研究,结果出乎意料,竟然不到 10 分钟就找出了最佳方案。但我假装还没有搞出来,趁着下班前这段时间把方案整理成了现在你们看到这篇文章。...这种特质使得 JSON 成为了最理想数据交换格式。 JSON 建构于两种常见数据结构: “/值”对。 数组。 这使得 JSON 在同样基于这些结构编程语言之间交换成为可能。...03、Jackson Jackson基于 Stream 构建一款用来序列化和反序列化 JSON Java 开源库,社区非常活跃,其版本更新速度也比较快。...jackson-core,核心包,提供基于"流模式"解析相关 API,它包括 JsonPaser 和 JsonGenerator。...jackson-databind ,数据绑定包, 提供基于"对象绑定" 解析相关 API ( ObjectMapper ) 和"树模型" 解析相关 API (JsonNode);基于"对象绑定" 解析

    1.3K20

    面向对象--序列化与反序列化

    反之,将二进制流恢复为数据对象过程称之为反序列化(Deserialization)。序列化需要保留充分信息以恢复数据对象,但是为了节省存储空间和网络带宽,序列化二进制流又要尽可能小。...使用Java原生态序列化需要注意,Java反序列化时候不会调用类无参构造方法,而是调用native方法将成员变量赋值为对应类型初始值,基于性能以及兼容性考虑,不推荐使用Java序列化。...特性: 自描述序列化类型,不依赖外部描述文件或接口定义,用一个字节表示常用基础类型,极大缩短了二进制流。...所以在父类、子类存在同名成员变量情况下,Hessian 序列化时,先序列化子类,然后序列化父类,因此反序列化结果会导致子类同名成员变量被父类值覆盖。...Java工程中广泛使用Apache Commons Collections、Jackson、fastjson等都出现过反序列化漏洞。 如果防范这种黑客攻击呢?

    1.4K20

    Fastjson到了说再见时候了

    专栏里不可避免提到了Jackson和Fastjson比较,本人一直持中立态度,主要原因有二: 两者都很流行(国内Fastjson流行度甚至超过Jackson),因此平时开发中两者都用(需要随大流嘛...但最终还是决定引用Robin结果展示给大家,看了他测试方案(代码)更加专业些:几种常用 JSON 库性能比较,结论如下两张图 [序列化] [反序列化] 总结论:除了Json-lib是来搞笑(...Jackson综合性能表现更好) 既然差异性这么小,Fastjson一味强调它是最快真的有意义?...--- 4、API真的简单? 答:真的。文上有解释,这也许可能大概是你选择使用Jackson作为JSON库最重要理由。...如果你基于它做过中间件开发、框架开发或者是DDD驱动设计开发,相信你也深有体会: [20200702151128425.png?#x60] --- 总结 真理是相对,没有绝对真理。

    89040
    领券