在jackson中自定义序列化的公认惯例是什么?

时间:2015-09-16 00:49:25

标签: java json serialization jackson

我正在尝试为jackson中的对象编写自定义序列化,似乎有很多选项,我想知道一个人是否比其他人更受欢迎。

我读过关于JsonSerializableWithType及其弃用的兄弟JsonSerializable的文章。这似乎很好,因为它不要求班级用户在他们的Module中注册ObjectMapper。但是我似乎无法解决JsonSerializableWithType或找到其使用的任何示例。谈论它的fastxml页面似乎也过时了。

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

对于其中任何一方而言,是否存在令人信服的论据?或者是以Module注册ObjectMapper最常用的方式?

1 个答案:

答案 0 :(得分:1)

长话短说:这真的取决于您的个人偏好,以及您是否可以访问价值对象的源代码。

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

所以我不会说普遍偏好:每个都有效,受到支持,(在我看来)对某些情况有意义。

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

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

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