在java验证注释中指定替代项
我正在寻找一种方法来指定允许备选方案的验证约束,例如:在java验证注释中指定替代项,java,annotations,hibernate-validator,Java,Annotations,Hibernate Validator,我正在寻找一种方法来指定允许备选方案的验证约束,例如: @Documented @Constraint(validatedBy = {}) @Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER}) @Retention(RUNTIME) @Pattern(regexp = "^(\\s|\\d|[-+:()])*$") @Or( // I'm looking for something like this @Siz
@Documented
@Constraint(validatedBy = {})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Pattern(regexp = "^(\\s|\\d|[-+:()])*$")
@Or( // I'm looking for something like this
@Size(min = 6, max = 20),
@Size(min = 0, max = 0)
)
public @interface Phone {
String message() default "Not a valid phone number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@已记录
@约束(validatedBy={})
@目标({方法,字段,注释类型,构造函数,参数})
@保留(运行时)
@模式(regexp=“^(\\s |\\d |[-+:())*$”)
@或者(//我在找这样的东西
@尺寸(最小值为6,最大值为20),
@尺寸(最小值=0,最大值=0)
)
公共@接口电话{
字符串消息()默认为“不是有效的电话号码”;
类[]组()默认值{};
类我找到了一个解决方案,包括创建几个中间注释并使用@ConstraintComposition(CompositionType.OR)
,但也许有人会提出更好的解决方案
因此,首先,为备选方案的单个分支创建注释:
@Documented
@Constraint(validatedBy = {})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Size(max = 0)
public @interface Empty {
String message() default "Should be empty string";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
@已记录
@约束(validatedBy={})
@目标({方法,字段,注释类型,构造函数,参数})
@保留(运行时)
@尺寸(最大值=0)
公共@接口为空{
字符串消息()默认值“应为空字符串”;
类[]组()默认值{};
类[]组()默认值{};
ClassSo@Size
在Bean Validation 2.0中是可重复的(HV 6也是如此)但是现在,您可以使用与@Size
关联的列表
容器。关于@OverridesAttribute
,您可以使用约束索引
将其应用于特定约束。在您的情况下,正则表达式可以覆盖它:@Pattern(regexp=“^ |(\\s|\\d |[-+:()]){6,20})
不需要@Size
。
@Documented
@Constraint(validatedBy = {})
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@ConstraintComposition(CompositionType.OR)
@Size
@Empty
public @interface SizeOrEmpty {
String message() default "Should be empty or have defined size";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@OverridesAttribute(constraint = Size.class, name = "min") int min();
@OverridesAttribute(constraint = Size.class, name = "max") int max();
}