休眠验证器:违规消息语言

Dac*_*ein 2 java junit hibernate hibernate-validator

我有一个测试类,我在其中测试用例如@NotNull注释的域模型

在我的测试课中,我首先要获得验证器

private static Validator validator;

@BeforeClass
public static void setup() {
    validator = Validation.buildDefaultValidatorFactory().getValidator();
}
Run Code Online (Sandbox Code Playgroud)

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

Set<ConstraintViolation<Person>> violations = validator.validate( aPerson );
Run Code Online (Sandbox Code Playgroud)

可以说,我想检索我做的第一条违规消息:

String violationMessage = violations.iterator().next().getMessage()
Run Code Online (Sandbox Code Playgroud)

我尚未在@NotNull批注上设置任何自定义违规消息。因此,休眠验证器将从hibernate-validator-jar中的资源包中提取默认消息。我的路径如下所示:

hibernate-validator-5.3.5.Final.jar
    - org
        - hibernate
            - validator
                ...
                ResourceBundle 'Validation Messages'
Run Code Online (Sandbox Code Playgroud)

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

@NotNull违规消息(德语)

javax.validation.constraints.NotNull.message     = darf nicht null sein
Run Code Online (Sandbox Code Playgroud)

英文@NotNull违规消息

javax.validation.constraints.NotNull.message     = may not be null
Run Code Online (Sandbox Code Playgroud)

题:

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

Gui*_*met 6

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>
Run Code Online (Sandbox Code Playgroud)


Ger*_*ost 3

从参考文档中总结出来的摘要:

默认情况下,在包中查找消息时将使用 JVM 的默认区域设置 (Locale#getDefault())。

在不接触源代码或摆弄操作系统/用户设置的情况下,尝试使用西班牙语消息:

java -Duser.country=ES -Duser.language=es
Run Code Online (Sandbox Code Playgroud)

Hibernate 验证器 5.1 参考