原始集合的休眠验证

我希望能够执行以下操作:


@Email

public List<String> getEmailAddresses()

{

   return this.emailAddresses;

}

换句话说,我希望将列表中的每个项目都验证为电子邮件地址。当然,这样注释一个集合是不可接受的。


有没有办法做到这一点?


汪汪一只猫
浏览 340回答 3
3回答

繁星淼淼

我没有足够的声誉对原始答案进行评论,但是也许值得一提的是,JSR-308处于最终发布阶段,并将在发布时解决此问题!但是,它将至少需要Java 8。唯一的区别是,验证批注将放入类型声明中。//@Emailpublic List<@Email String> getEmailAddresses(){&nbsp; &nbsp;return this.emailAddresses;}请让我知道您认为我可以最好地将这些信息提供给正在寻找的其他人。谢谢!

慕神8447489

由于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 {&nbsp; &nbsp; // copy&paste all attributes from Awesome annotation here&nbsp; &nbsp; String message() default "";&nbsp; &nbsp; Class<?>[] groups() default {};&nbsp; &nbsp; Class<? extends Payload>[] payload() default {};&nbsp; &nbsp; String someAttribute();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java