【问题标题】:Hibernate Validator: Violation Message LanguageHibernate Validator:违规消息语言
【发布时间】:2017-05-01 19:53:58
【问题描述】:

我有一个测试类,我正在测试一个带有例如注释的域模型。 @NotNull

在我的测试课中,我首先得到了验证器

private static Validator validator;

@BeforeClass
public static void setup() {
    validator = Validation.buildDefaultValidatorFactory().getValidator();
}

稍后我有一个 JUnit 测试,我在其中测试域模型(比如说一个人)

Set<ConstraintViolation<Person>> violations = validator.validate( aPerson );

假设,我想检索我做的第一条违规消息:

String violationMessage = violations.iterator().next().getMessage()

我没有在 @NotNull 注释上设置任何自定义违规消息。因此,hibernate 验证器将从 hibernate-validator-jar 中的 Resource Bundle 中提取默认消息。我的路径如下所示:

hibernate-validator-5.3.5.Final.jar
    - org
        - hibernate
            - validator
                ...
                ResourceBundle 'Validation Messages'

在此资源包中支持多种语言(英语、德语、法语……)

示例

德语中的@NotNull 违规消息

javax.validation.constraints.NotNull.message     = darf nicht null sein

@NotNull 违规信息英文

javax.validation.constraints.NotNull.message     = may not be null

问题:

在测试时,如何强制 Hibernate Validator 从资源包中为违规消息选择特定语言?现在,我收到了英文违规信息。但是,在另一台机器上德语。

【问题讨论】:

    标签: java hibernate junit hibernate-validator


    【解决方案1】:

    GKR的答案是正确的。

    可能有用的其他信息:如果您使用 Maven 和 surefire 插件,则需要执行以下操作:

    <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${maven-surefire-plugin.version}</version>
        <configuration>
            <forkMode>once</forkMode>
            <argLine>-Duser.language=en</argLine>
        </configuration>
    </plugin>
    

    【讨论】:

      【解决方案2】:

      摘自参考文档的摘要:

      默认情况下,在包中查找消息时将使用 JVM 的默认语言环境 (Locale#getDefault())。

      无需接触源代码或摆弄您的操作系统/用户设置,试试这个西班牙语消息:

      java -Duser.country=ES -Duser.language=es
      

      Hibernate Validator 5.1 Reference

      【讨论】:

        【解决方案3】:

        您可以使用测试框架的准备部分来设置默认语言环境,这将影响违规消息的语言。如果您想使用英语,请添加

        Locale.setDefault(Locale.ENGLISH);

        在构建您的验证器工厂之前。在您的示例中可能如下所示:

        private static Validator validator;
        
        @BeforeClass
        public static void setup() {
            Locale.setDefault(Locale.ENGLISH);
            validator = Validation.buildDefaultValidatorFactory().getValidator();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 2013-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多