为了账号安全,请及时绑定邮箱和手机立即绑定

原始集合的休眠验证

原始集合的休眠验证

汪汪一只猫 2019-12-21 11:23:51
我希望能够执行以下操作:@Emailpublic List<String> getEmailAddresses(){   return this.emailAddresses;}换句话说,我希望将列表中的每个项目都验证为电子邮件地址。当然,这样注释一个集合是不可接受的。有没有办法做到这一点?
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

我没有足够的声誉对原始答案进行评论,但是也许值得一提的是,JSR-308处于最终发布阶段,并将在发布时解决此问题!但是,它将至少需要Java 8。


唯一的区别是,验证批注将放入类型声明中。


//@Email

public List<@Email String> getEmailAddresses()

{

   return this.emailAddresses;

}

请让我知道您认为我可以最好地将这些信息提供给正在寻找的其他人。谢谢!


查看完整回答
反对 回复 2019-12-21
?
慕神8447489

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();

}


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 339 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信