- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为 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/
我是一名优秀的程序员,十分优秀!