如何自定义javax验证的区域设置

时间:2013-05-09 16:09:36

标签: java validation locale

我在java中有一个类,我正在使用javax.validation验证此代码:

    ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
    Validator validator = validatorFactory.getValidator();
    Set<ConstraintViolation<ApplicationRequest>> validationErrors = validator.validate(request);

    for (ConstraintViolation<MyObject> valErrors : validationErrors) {
        errors.add(valErrors.getPropertyPath() + " " + valErrors.getMessage() + ". ");
    }

现在,如果我在西班牙语服务器中执行它,错误消息将以西班牙语显示。但是,当我在测试服务器(安装在英语环境中)中执行它时,消息以英语显示。我怎么能告诉javax验证使用Locale作为西班牙语。有可能吗?

3 个答案:

答案 0 :(得分:1)

启动应用程序时,您可以设置默认语言环境: how do I set the default locale for my JVM?

如果您正在使用应用程序服务器,请查看文档如何执行此操作 - 通常有配置来执行此操作,例如对于JBoss,您需要将-Duser.language = en添加到run.conf的JAVA_OPTS部分。

答案 1 :(得分:0)

我最终使用每个语言环境的属性文件解决了它,名为ValidationMessages_es.properties或ValidationMessages_pt.properties等。

在每一个中,我都使用以下方式自定义了所有使用过的消息:

javax.validation.constraints.NotNull.message=no puede ser nulo
org.hibernate.validator.constraints.NotEmpty.message=no puede estar vacío
javax.validation.constraints.Size.message=debe tener entre {min} y {max} caracteres
javax.validation.constraints.Min.message=debe ser mayor que {value}
javax.validation.constraints.Past.message=debe ser una fecha pasada

答案 2 :(得分:0)

默认情况下,可以这样设置特定的区域设置:

  static {
    Locale.setDefault(Locale.UK);
  }

在您的情况下,您应该将西班牙语设置为语言环境。