Hibernate验证器:违规消息语言



我有一个测试类,其中我正在测试一个用例如用注释的域模型。@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验证器从资源捆绑包中选择特定语言来违反消息?现在,我收到的英语违规消息。但是,在另一台机器上。

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>

摘要从参考文档凝结:

默认情况下,在捆绑包中查找消息时,将使用JVM的默认场所(Locale#getDefault(((。

无需触摸源代码或与您的OS/用户seetings提出小提琴,请尝试使用以下西班牙消息:

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

Hibernate验证器5.1参考

您可以使用testframework的准备部分设置默认场所,这将影响您的违规消息的语言。如果您想期望英语,请添加

locale.setDefault(locale.english(;

在建造验证器工厂之前。在您的示例中可能看起来像这样:

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

最新更新