i18n用于bean验证消息

时间:2014-12-27 20:15:47

标签: java bean-validation

我有以下代码来进行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);

1 个答案:

答案 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)