为ConstraintViolation添加更多属性

时间:2019-05-20 00:54:24

标签: java hibernate-validator

我对使用Hibernate验证程序是陌生的,显然我只能从ConstraintViolation获取错误消息和属性路径。

我要做的是提供更多信息。例如如果我要测试一个整数的最大值,而我的最大限制不断变化,我想添加除错误消息和属性路径之外的最大值:

  1. 错误消息:一些错误消息
  2. 最大值:30
  3. 属性路径: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;
    }
    

有什么想法吗?

1 个答案:

答案 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的对应物)。