如果我有ConstraintValidatorContext
并且我使用ConstraintViolationContextBuilder
构建buildConstraintViolationWithTemplate(String messageTemplate)
,是否有可能传递自定义参数值?
相应的属性文件看起来像这样:
Foobar.invalidValue.message=Invalid value. Valid values are {VALID_VALUES}
然后,我想以编程方式设置{VALID_VALUES}
的值。
你有什么想法吗?
答案 0 :(得分:3)
您只能在消息模板中引用相关约束注释的属性,例如对于属性为min
和max
的约束:
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?