首页 > 解决方案 > 向 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;
    }
    

关于如何做的任何想法?

标签: javahibernate-validator

解决方案


想法是使用此处解释的动态有效负载功能: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 的对应项)。


推荐阅读