hibernate 如何访问雅加达验证约束默认消息?

mrfwxfqh  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(169)

使用Jakarta Be Validation https://hibernate.org/validator/来验证Java代码,我用默认的@NotEmpty验证anotaton注解了一个CLASS属性

@Validate
public class A {
..
@NotEmpty
private List<String> myList;
..
}

在一个测试中,我将myList设置为一个空列表,验证该列表,并期望违规“不得为空”,这是标准@NotEmpty注解的默认违规消息。我通过打印它发现了这一点,但这里也是https://github.com/hibernate/hibernate-validator/blob/main/engine/src/main/resources/org/hibernate/validator/ValidationMessages.properties

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

assertThat(violations).anyMatch(having Message("must not be empty", A.class));

这是可行的,但我希望将预期的消息字符串替换为对默认字符串的引用,如jakarta.validation.constraints.Null.Message,以避免重复字符串。然而,这并不起作用:

assertThat(violations).anyMatch(having Message(jakarta.validation.constraints.Null.message, A.class));

周围有没有验证Maven,可以告诉我我错过了什么?

p1tboqfb

p1tboqfb1#

如果由**/ValidationMessages.properties(或特定于语言的ValidationMessages_<x>(_<y>).properties)提供,则必须从类路径**加载它:

Properties ps = new Properties() ;
ps.load( getClass().getResourceAsStream("/ValidationMessages.properties") ) ;

assertThat(violations).anyMatch(having Message( 
  ps.getProperty( "jakarta.validation.constraints.Null.message"),
  A.class))

如果被直接类注解提供/覆盖,则必须在特定的类字段或方法上使用反射并获取其注解

相关问题