我在正确设置自定义 Bean 验证消息时遇到了一些困难。我添加了以下约束定义并将其放在一些 bean 上,更好地说是属性。
@Constraint(validatedBy = NobleValidator.class)
@Documented
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface Noble {
String message() default "NOT_NOBLE";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
好吧,现在我刚刚实现了自定义 validator “NobleValidator”。这一切都在顺利进行。但我的问题来了。如果我尝试通过运行这样的验证来验证 bean
// ...
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Person>> s = validator.validate(p, new Class[]{});
if (s == null || s.isEmpty()) {
// Do some suff
} else {
for (ConstraintViolation<Person> cv : s) {
LOGGER.error(String.format("Constraint violation: %s", cv.getMessage()));
}
}
// ...
好的,验证有效,但结果不符合预期。我收到“违反约束:NOT_NOBLE”。所以我猜 validator 能够查找我的属性文件,因此它无法用正确的消息文本替换 key 。 ValidatorMessages.properties 看起来像这样:
NOT_NOBLE=Foo Bar并不高贵
规范(JSR303)说我必须将 ValidationMessages.properties 放入我的类路径根目录中,我期望它应该是 MyDeploymentUnit.war/WEB-INF/classes/ValidationMessages.properties 这就是我的应用程序的构建和部署方式。出于调试原因,我将其添加到我的自定义 validator 中,以确保文件存在并正确设置
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
InputStream is = getClass().getClassLoader().getResourceAsStream("ValidationMessages.properties");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String l = null;
try {
while ((l = br.readLine()) != null) {
LOGGER.info(String.format("Line: %s", l));
}
} catch (IOException ex) {
LOGGER.error(ex.getMessage());
}
// Validation logic goes here
上面的代码工作得很好。我正在获取 ValidationMessages.properties 中指定的所有行
目前我正在使用 JBossAS7.0.2,所以我的任何人都可以给我一些建议如何修复它并接收解析的文本而不是 key ?非常感谢
最佳答案
将消息 key 括在大括号中:
@Constraint(validatedBy = NobleValidator.class)
@Documented
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface Noble {
String message() default "{NOT_NOBLE}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
关于java - BeanValidation : Messages from ValidationMessages. 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784058/