@Pattern的元注释在春天不起作用

时间:2015-09-14 13:25:52

标签: java annotations bean-validation

注释如下:

@Pattern(regexp = "^[0-9]+$")
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTestAnnotation {

}

当我使用@MyTestAnnotion注释一个字段时,即使该字段不包含所有数字,该调用也会没有任何错误。

以下部分已通过以下答案解决。主要问题仍然存在。 我尝试添加:

@Pattern(regexp = "^[0-9]+$")
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
public @interface MyTestAnnotation {

}

在我的@MyTestAnnotation上,它不会让我输入一个消息属性,但是当我运行代码时,它会给出错误消息,指出消息属性未指定。

如果我将@Pattern注释直接放在字段上,它的行为与预期一致。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:4)

您的注释错误。请参阅bean验证规范的section 3.1.1以获取约束的最小属性,并section 3.3了解如何正确组合。

您的注释缺少messagegroupspayload属性。

@Pattern(regexp = "^[0-9]+$")
@Target({ ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
public @interface MyTestAnnotation {

    String message() default "{com.acme.constraint.MyConstraint.message}";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

如果没有这些属性,您的注释不会被视为约束。