JSR 303 / ConstraintValidatorContext:参数化错误消息

时间:2012-11-29 10:21:34

标签: java validation bean-validation

如果我有ConstraintValidatorContext并且我使用ConstraintViolationContextBuilder构建buildConstraintViolationWithTemplate(String messageTemplate),是否有可能传递自定义参数值?

相应的属性文件看起来像这样:

Foobar.invalidValue.message=Invalid value. Valid values are {VALID_VALUES}

然后,我想以编程方式设置{VALID_VALUES}的值。

你有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您只能在消息模板中引用相关约束注释的属性,例如对于属性为minmax的约束:

size must be between {min} and {max}

因此,您可以将有效值指定为注释属性。

如果您正在使用Hibernate Validator作为Bean Validation提供程序,那么您可以实现一个自定义ResourceBundleLocator,它返回包含值的键的包:

public class MyResourceBundleLocator implements ResourceBundleLocator {

    public ResourceBundle getResourceBundle(Locale locale) {
        //return a bundle with keys for your values, e.g. set dynamically
    }
}

然后在获得验证器时设置定位器:

Validator validator Validation.byProvider(HibernateValidator.class)
    .configure()
    .messageInterpolator(
        new ResourceBundleMessageInterpolator(
            new MyResourceBundleLocator() ) )
    .buildValidatorFactory()
    .getValidator();

或者您可以自己格式化和准备消息并将其传递给buildConstraintViolationWithTemplate()

答案 1 :(得分:0)

我找到了一个允许使用参数化错误消息自定义Constraint注释的解决方案:有关详细信息,请参阅此问题:Parameterized error messages for javax.validation.constraints.Pattern annotation?