3 回答
TA贡献1775条经验 获得超11个赞
我没有足够的声誉对原始答案进行评论,但是也许值得一提的是,JSR-308处于最终发布阶段,并将在发布时解决此问题!但是,它将至少需要Java 8。
唯一的区别是,验证批注将放入类型声明中。
public List<@Email String> getEmailAddresses()
{
return this.emailAddresses;
}
请让我知道您认为我可以最好地将这些信息提供给正在寻找的其他人。谢谢!
TA贡献1780条经验 获得超1个赞
由于Java注释本身的局限性,不可能编写类似于包装任何约束注释的通用包装注释。但是,您可以编写一个通用约束验证器类,该类将每个元素的实际验证委托给现有的约束验证器。您必须为每个约束写一个包装器注释,但只有一个验证器。
我已经在jirutka / validator-collection(在Maven Central中提供)中实现了这种方法。例如:
@EachSize(min = 5, max = 255)
List<String> values;
该库使您可以轻松地为任何验证约束创建“伪约束”,以注释简单类型的集合,而无需为每个集合编写额外的验证器或不必要的包装器类。EachX所有标准Bean验证约束和特定于Hibernate的约束都支持该约束。
要@EachAwesome为自己创建一个@Awesome约束,只需复制并粘贴注释类,将@Constraint注释替换为,@Constraint(validatedBy = CommonEachValidator.class)然后添加注释@EachConstraint(validateAs = Awesome.class)。就这样!
// common boilerplate
@Documented
@Retention(RUNTIME)
@Target({METHOD, FIELD, ANNOTATION_TYPE})
// this is important!
@EachConstraint(validateAs = Awesome.class)
@Constraint(validatedBy = CommonEachValidator.class)
public @interface EachAwesome {
// copy&paste all attributes from Awesome annotation here
String message() default "";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String someAttribute();
}
添加回答
举报