我对使用Hibernate验证程序是陌生的,显然我只能从ConstraintViolation获取错误消息和属性路径。
我要做的是提供更多信息。例如如果我要测试一个整数的最大值,而我的最大限制不断变化,我想添加除错误消息和属性路径之外的最大值:
属性路径:some.property.path
public boolean isValid(final Integer integer, final ConstraintValidatorContext constraintValidatorContext) {
boolean isValid = true;
if(integer >= SomeClass.maxValue) {
context.disableDefaultConstraintViolation();
context.buildConstraintViolationWithTemplate("some error message")
.addPropertyNode("some.property.path")
.addConstraintViolation();
isValid = false;
break;
}
return isValid;
}
有什么想法吗?
答案 0 :(得分:1)
想法是使用动态有效负载功能,如下所述:https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-dynamic-payload。例如:
HibernateConstraintValidatorContext hibernateContext = context.unwrap(
HibernateConstraintValidatorContext.class
);
hibernateContext.withDynamicPayload( yourAdditionalInformation );
在文档的示例中,我们仅包含一个简单值,但是您可以注入包含所需所有属性的bean。
请注意,这是特定于Hibernate Validator的功能(因此需要将上下文包装为其特定于Hibernate Validator的对应物)。