java-Bean验证是否验证一种验证有效?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-Bean验证是否验证一种验证有效?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1796字,纯文字阅读大概需要3分钟。
内容图文
![java-Bean验证是否验证一种验证有效?](/upload/InfoBanner/zyjiaocheng/677/9ef643bea7924b479386d85a60b77c36.jpg)
假设有一个像这样的bean:
public class Car {
@ConstraintA
@ConstraintB
private String type;
//getters and setters
}
通常,要求两个约束都必须接受才能使该字段有效.是否有可能以某种方式配置Bean验证,如果ConstraintA有效,则仅检查ConstraintB,并且仅当两个均无效时才对字段进行无效?
编辑:更多解释…
假设ValidatorA用于ConstraintA,而ValidatorB用于ConstraintB.在典型的配置中,Bean验证的工作方式如下:
if (validatorA.isValid(car.type) && validatorB.isValid(car.type)) {
validate(car);
}
我想问的是,是否可以通过以下方式配置它:
if (validatorA.isValid(car.type) || validatorB.isValid(car.type)) {
validate(car);
}
解决方法:
我不确定我要问的是什么,但是如果您打算仅在@ Contraint1没有失败时执行@ Contraint2验证,则可以使用JSR-303 groups进行如下操作:
@GroupSequence(value={Car.class, Contraint1Group.class,Contraint2Group.class})
public class Car {
@ContraintA(groups=Contraint1Group.class)
@ContraintB(groups=Contraint2Group.class)
private String type;
}
您还需要声明标记接口以指定组:
public interface Contraint1Group extends Default { }
public interface Constraint2Group {}
当没有使用约束注释指定任何组时,第一个扩展javax.validation.groups.Default是默认的扩展名.
问题更新后进行编辑:您可以,但仅当使用休眠验证器时(它是JSR-303的参考实现),同时提供@ConstraintComposition(OR) extension,同时创建新的自定义组成的验证规则:
@ConstraintComposition(OR)
@Constraint1
@Constraint2
@ReportAsSingleViolation
@Target({ METHOD, FIELD })
@Retention(RUNTIME)
@Constraint(validatedBy = { })
public @interface Constraint1ORConstraint2 {
String message() default "{Constraint1ORConstraint2.message}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
其中@ReportAsSingleViolation意味着每次执行仅报告一次违规(您可以全部删除此注释).由于@ Constraint1ORConstraint2注释本身不需要其他验证,因此请勿在@Constraint元注释内声明验证器.
内容总结
以上是互联网集市为您收集整理的java-Bean验证是否验证一种验证有效?全部内容,希望文章能够帮你解决java-Bean验证是否验证一种验证有效?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。