Hibernate Validator:违规消息语言

时间:2017-05-01 19:53:59

标签: java hibernate junit hibernate-validator

我有一个测试类,我正在测试一个用例如注释的域模型。 @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中的资源包中提取默认消息。我的路径看起来像这样:

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从资源包中为违规消息选择特定语言?现在,我收到英语违规消息。但是,在德国的另一台机器上。

3 个答案:

答案 0 :(得分:4)

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>

答案 1 :(得分:1)

摘要摘自参考文档:

  

默认情况下,查找捆绑包中的邮件时将使用JVM的默认语言环境(Locale#getDefault())。

如果没有触及源代码或操作您的操作系统/用户节目,请尝试使用以获取西班牙语消息:

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

Hibernate Validator 5.1 Reference

答案 2 :(得分:0)

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

<块引用>

Locale.setDefault(Locale.ENGLISH);

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

private static Validator validator;

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