des*_*pot 9 java jackson deserialization spring-social
我需要在POJO的字段上完成每个反序列化后执行一些代码.有什么方法可以通过一些杰克逊注释(或其他)策略来做到这一点吗?
一种方法是为每个字段类型创建一个自定义反序列化器,它将实现PostLogicDeserializerInterface或扩展一些PostLogicDeserializerAbstract.但这会使大量难以维护的代码变得混乱(而不仅仅是使用@JsonProperty).所以我认为这不是一个好主意.
我看到你可以在类级别使用@JsonDeserialize,但只能用于值类.从文档:
注释值类时,配置用于值类的实例,但可以被更具体的注释(附加到方法或字段的注释)覆盖.
所以我认为这也行不通.
我的目标是确定反序列化器设置的字段百分比.我需要有一个计数器,它会在每次调用的反序列化(填充字段)时增加.一旦整个类(POJO)反序列化结束,我需要使用反射执行一些逻辑.
我现在实施的方式是
我更喜欢杰克逊的策略,因为我不需要用反射来检查POJO.它宁愿在适当的位置完成(当POJO被反序列化时).
干杯,
暴君
此时没有任何特定功能可以进行后处理或预处理;并且这种接近于数据绑定应该做什么的边界。如果我必须为特定字段执行此操作,我可能只需将其添加到 setter 中,因为这很简单且有效;但在所有相关的 setter 中需要相同的逻辑。
@JsonDeserialize 也可用于单个属性(字段、setter),因此您可以创建自定义反序列化器:并且由于您想要进行后处理,您可以定位“真正的”反序列化器(理想情况下,通过JsonDeserializer实现ContextualDeserializer或ResolvableDeserializer- 这可能在这里无关紧要,但对于一般情况,在这里完成是为了避免循环依赖问题),委托给它并修改值。这假设您关心的不仅仅是领域的价值。
最后,还有一些方法可以修改BeanDeserializer实例(通过注册BeanDeserializerModifier)——您可以将相关组件(我认为是 SettableBeanProperty...)子类化以进行额外处理,甚至替换反序列化器以使用,保留对原始“的引用”默认”解串器。
但最终,您的案例听起来可能最好由其他东西处理:例如 Bean Validation API (jsr-303) 似乎是后处理逻辑的潜在良好匹配。由于它与数据绑定有些正交,因此它可能是一个更好的选择,因为它独立于数据绑定(杰克逊),可重用,所有好东西。
| 归档时间: |
|
| 查看次数: |
3215 次 |
| 最近记录: |