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

THI*_*ELP 11 java json pojo jackson jackson2

这个问题扩展了这个问题.

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

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

Sha*_*her 5

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

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


Wil*_*son 5

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

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