栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

对于多态反序列化,Jackson的@JsonSubTypes是否仍然必要?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

对于多态反序列化,Jackson的@JsonSubTypes是否仍然必要?

使用Jackson可以通过两种方法在序列化和反序列化中实现多态。它们在发布的链接的 第1部分
中定义。

您的密码

@JsonTypeInfo(    use = JsonTypeInfo.Id.MINIMAL_CLASS,    include = JsonTypeInfo.As.PROPERTY,    property = "@class")

是第二种方法的一个例子。首先要注意的是

带注释的类型及其子类型的所有实例都使用这些设置(除非被另一个注释覆盖)

因此,此配置值传播到所有子类型。然后,我们需要一个类型标识符,该标识符将Java类型映射到JSON字符串中的文本值,反之亦然。在您的示例中,这是由

JsonTypeInfo.Id#MINIMAL_CLASS

意味着将具有最小路径的Java类名称用作类型标识符。

因此,从目标实例生成一个最小的类名,并在序列化时将其写入JSON内容。或者使用最小类名来确定反序列化的目标类型。

您可能还使用

JsonTypeInfo.Id#NAME

表示将 逻辑类型名称 用作类型信息;然后,需要将名称单独解析为实际的具体类型(

Class
)。

要提供这样的逻辑类型名称,请使用

@JsonSubTypes

JsonTypeInfo
一起使用的注释指示可序列化多态类型的子类型,并 关联 JSON内容中使用的 逻辑名
(比使用物理Java类名更易于移植)。

这只是获得相同结果的另一种方法。您正在询问状态的文档

基于Java类名的类型ID相当简单:它只是类名,可能是一些简单的前缀删除(“最小”变体)。但是类型名称是不同的:必须在逻辑名称和实际类之间进行映射。

因此

JsonTypeInfo.Id
,处理类名称的各种值很简单,因为它们可以自动生成。但是,对于类型名称,您需要显式提供映射值。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/437114.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号