我有以下代码来进行bean验证:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<MyObject>> validations = validator.validate(myObject);
if (!CollectionUtils.isEmpty(violations)) {
for (ConstraintViolation<?> validateError : violations) {
}
}
有没有办法从标准bean验证资源文件中获取消息?
我使用以下(非标准方式):
Messages.get(validateError.getMessageTemplate().substring(1,
validateError.getMessageTemplate().length() - 1),locale);
答案 0 :(得分:2)
假设您要根据某些外部条件(例如用户区域设置)更改插值区域设置,您可以在引导Bean验证时指定自定义MessageInterpolator
。您可以通过XML和validation.xml
或以编程方式执行此操作:
ValidatorFactory validatorFactory = Validation.byDefaultProvider()
.configure()
.messageInterpolator( new MyMessageInterpolator() )
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator();
在MyMessageInterpolator
中,您可以通过ThreadLocal
检索(用户)区域设置。然后,您可以使用MessageInterpolator
的插值方法将实际验证传递给默认消息插值器(可通过Configuration#getDefaultMessageInterpolator()在引导期间访问),该插值方法采用明确的Locale
实例:
public String interpolate(String messageTemplate, Context context, Locale locale)