java - BeanValidation : Messages from ValidationMessages. 属性

标签 java jakarta-ee jboss java-ee-6 bean-validation

我在正确设置自定义 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/

相关文章:

java - 如何更改 jboss 日志记录级别以显示我正在调用哪个 java 类?

Tomcat 还是 JBoss?

java - 谐波序列递归

java - token "Invalid Character"语法错误,删除此 token

java - BASE64Encoder() 没有输出

eclipse - 中文开发者通知 : run tomcat 7. 0 使用eclipse juno抛出异常

java - 对 RMI 公开的 jBoss EJB 的并发远程调用是否序列化?

java - Qt Jambi Javadoc 缺失

java - 在没有ORM的情况下在sql中映射一对多的方法

jakarta-ee - JPA 动态持久化单元名称