繁体   English   中英

Jackson定制过滤器,具有完整的POJO数据绑定

[英]Jackson custom filter with full POJO data bind

这个问题扩展了这个问题

如果您只有几个字段,之前的解决方案效果很好,那么当您拥有十几个字段时,它就变得无法维护。 现在,我当前的设置使用完整的数据绑定,所以我有一个POJO,Jackson将使用它来自动反序列化JSON。

但是,和以前一样,某些字段具有需要通过的约束。 基本上,我正在寻找类似于的答案,但无需设置任何属性。 只是一个自定义反序列化器,它将充当过滤器,并在字段不符合约束时抛出自定义异常。 如果过滤器结束时没有抛出任何异常,Jackson应自动将JSON绑定到POJO。

似乎Json Schema可能符合您的需求。 它允许json字符串的灵活(和复杂)验证规则在反序列化之前。 它包括必填字段,基于正则表达式的值检查,行业标准格式(例如,您可以将字段定义为“电子邮件”格式),跨字段依赖项(在最新的v4中)等

以上是与语言无关的标准。 至于Java实现,我使用了这个支持最新的json模式版本(该标准仍在不断发展)。 验证器的初始集成是很多工作,(因为我非常动态的json模型)但是之后引入新的验证规则非常方便(只需要更改json模式文件)

我建议相应地使用Jackson和Hibernate Vaildator来分离反序列化和验证的问题。 我们的想法是首先将json数据反序列化为POJO,然后根据需求验证POJO。 在这种情况下,您可以应用类级别约束进行验证。 类级别约束具有很大的灵活性,可以通过访问对象实例来验证多个相关属性。 它简单而有力。

通常验证需要更高层次的关注。 在反序列化之后处理这个问题会更好。 这样做可以使代码更容易管理和重用POJO和验证规则。

只是考虑一下:如果你不关心反序列化过程中的验证,请为你的POJO类尝试@JsonIgnoreProperties(ignoreUnknown = true)注释。 您可以稍后在实际业务逻辑与pojo类一起使用时进行验证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM