向 ConstraintViolation 添加更多属性

Add more properties to ConstraintViolation

我是 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;
    }
    

知道怎么做吗?

我们的想法是使用动态负载功能,详细说明如下: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-specific 特性(因此需要将上下文解包到它的 Hibernate Validator-specific 对应物)。