gpt4 book ai didi

java - Jackson 中自定义序列化的公认做法是什么?

转载 作者:行者123 更新时间:2023-12-01 11:08:54 27 4
gpt4 key购买 nike

我正在尝试为 Jackson 中的对象编写自定义序列化,似乎有很多选项,我想知道是否通常会优先选择其中一个。

我已经了解了 JsonSerializedWithType 及其已弃用的同级 JsonSerialized。这看起来不错,因为它不需要类的用户在其 ObjectMapper 中注册 Module。但是我似乎无法解析 JsonSerializedWithType 或找到其用法的任何示例。谈论它的 fastxml 页面似乎也过时了。

另一个选项似乎是使用 JsonSerializer 进行外部序列化。我读过有关 @JsonSerialize 的内容,但无法判断它是否比 JsonSerialized 更好/更差/旧/新。

对于其中一个相对于另一个,是否有令人信服的论据?或者将 Module 注册到 ObjectMapper 是最受接受的方式?

最佳答案

长话短说:这实际上取决于您的个人喜好,以及您是否有权访问值对象的源代码。

区别在于内置(实现JsonSerialized)或外部序列化器(注释或模块);以及序列化器的内部(注释)与外部(模块)关联/注册。

所以我不会说存在普遍的偏好:每种都有效,都受到支持,并且(在我看来)在某些情况下是有意义的。

一些开发人员更喜欢外部方法,因为它允许值类不依赖于 Jackson 类型:例如,在实现 JsonSerialized 时,您可以添加对 jackson-databind 的硬依赖项>。使用@JsonSerialize注释,您对jackson-annotations的依赖关系较弱,而使用模块方法则根本没有直接依赖关系。

实现JsonSerialized有潜在的好处,因为这允许将值类及其处理(包括序列化)的所有细节封装在类定义中。有些人也会认为这是一个缺点;这取决于您对正确的 OOP 实践与开发实用性的看法。

现在:在某些情况下,例如支持第 3 方库时,您的选择仅限于外部模块或使用混合注释。对于您自己的值类型,您可以挑选。

关于java - Jackson 中自定义序列化的公认做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32597972/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com