注释如下:
@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注释直接放在字段上,它的行为与预期一致。
我在这里错过了什么吗?
答案 0 :(得分:4)
您的注释错误。请参阅bean验证规范的section 3.1.1以获取约束的最小属性,并section 3.3了解如何正确组合。
您的注释缺少message
,groups
和payload
属性。
@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 {};
}
如果没有这些属性,您的注释不会被视为约束。