在Spring中忽略了基于注释的验证的自定义消息

时间:2015-04-23 15:13:58

标签: java spring validation

基本上,我使用实现ConstraintValidator的验证器创建了自定义注释跨字段验证。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = SomeValidator.class)
@Documented
public @interface SomeAnnotation {
   String message() default "{javax.validation.constraints.NotNull.message}";

   Class<?>[] groups() default {};

   Class<? extends Payload>[] payload() default {};
}

验证器实现非常基础 - 它根据特定的选定实体类型检查某些字段是否为空(或不是)。服务器返回的JSON错误消息包含有错误的变量的正确路径,但不幸的是 - 它完全忽略了我传递的消息,将其替换为CustomAnnotationClass.entityClassInCamelCase.path.to.variable。我甚至尝试使用普通字符串(没有{ })或默认消息代码(例如,来自@NotNull,但适用于其他字段)没有运气。

这是我用来设置消息的代码:

constraintValidatorContext.buildConstraintViolationWithTemplate(getMessage()).addPropertyNode("someField").addPropertyNode("id")
                      .addConstraintViolation();

(其他字段之间的唯一区别是节点数和返回字符串的方法调用,但由于我对变量路径没有问题而忽略了所有消息,我认为这是无关紧要的。)

返回JSON的一个(稍加修改)示例:

{"fieldErrors":[{"path":"someField.id","message":"MyAnnotationClass.someEntity.someField.id"}]}

这是设置消息的错误方法还是我错过了一些配置?

0 个答案:

没有答案