我通过外部服务收到一条 XML 消息,我可以使用 MOXy 作为我的 JAXB 提供程序将其解码为 POJO。我目前能够使用 JPA (Hibernate) 将对象保存到数据库中,并且当遇到无效数据时,JSR-303 验证会按预期工作。
我的挑战是,在持久化之前,我想向 POJO 添加两个字段 - 提交者的用户 ID 和收到记录的日期。添加属性工作正常,一切都按预期持续存在。但是,一旦我将 @NotNull 约束添加到两个附加字段(以保护其他进程对同一表的写入),解码就会失败并出现以下错误:
未编码的 bean 违反了约束:
有没有办法在解码后禁用 JSR-303 检查?我必须在不久的将来创建大量这样的对象,并且为每条需要保留的传入消息设置 2 个不同的对象将不是最佳选择。
此外 - 稍后将必须注入(inject)其他非审计相关信息,因此添加不同的审计解决方案并没有多大帮助。
在此先感谢您的所有帮助!
最佳答案
在 MOXy 中关闭 BV:
Map<String, BeanValidationMode> props = new HashMap<>();
props.put(JAXBContextProperties.BEAN_VALIDATION_MODE, BeanValidationMode.NONE);
Class[] classes = new Class[] { Customer.class };
JAXBContext jaxbContext = JAXBContext.newInstance(classes, props);
https://wiki.eclipse.org/EclipseLink/Examples/MOXy/BVinJAXB/GettingStarted
关于JAXB、MOXy、JSR-303、JPA - 解码后禁用 JSR-303 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26515339/