在对 POJO 的字段进行每次反序列化后,我需要执行一些代码。有什么办法可以通过一些杰克逊注释(或其他)策略来做到这一点?
一种方法是为每个字段类型创建一个自定义反序列化器,以实现 PostLogicDeserializerInterface 或扩展一些 PostLogicDeserializerAbstract。但这会产生大量难以维护的杂乱代码(而不仅仅是使用@JsonProperty)。所以我认为这不是一个好主意。
我看到您可以在类级别使用@JsonDeserialize,但只能用于值类。从文档中:
注释值类时,配置用于值类的实例,但可以被更具体的注释(附加到方法或字段的注释)覆盖。
所以我认为这也行不通。
- 在 POJO 的 setter 方法中使用一些自定义逻辑是一种不好的做法!另一方面,我认为杰克逊无论如何都使用反射来设置字段......也不是一个好策略。
我的目标是确定反序列化程序设置的字段百分比。我需要有一个计数器,在每次调用反序列化(填充字段)时都会增加。一旦整个类(POJO)反序列化结束,我需要使用反射执行一些逻辑。
我现在实施的方式是
- 一旦我让杰克逊映射器反序列化 POJO,我就会使用反射遍历每个字段
- 检查它是否已设置,如果它是 null 或 -1 用于原始数字(以前的初始值)。(这种方法的一个缺点是如果设置了布尔值,您将无法检查它)
- 使用反射进行其他类型的检查(我们称之为逻辑 X)
- 执行取决于设置字段百分比和逻辑 X 的逻辑。
我更喜欢杰克逊策略,因为我不需要通过反射检查 POJO。它宁愿在原地完成(在 POJO 反序列化时)。
干杯,
暴君