基于变量的javax Bean验证?
发布时间:2020-12-15 02:30:19 所属栏目:Java 来源:网络整理
导读:假设我有一个包含两个成员变量的类: import javax.validation.constraints.Min;class Foo { private int minimumAge; private int maximumAge;} 我知道我可以像这样验证最小/最大值: @Min(1)private int minimumAge;@Max(99)private int maximumAge; 但我
假设我有一个包含两个成员变量的类:
import javax.validation.constraints.Min; class Foo { private int minimumAge; private int maximumAge; } 我知道我可以像这样验证最小/最大值: @Min(1) private int minimumAge; @Max(99) private int maximumAge; 但我真正想做的是确保minimumAge始终小于或等于maximumAge.所以我想要这样的东西: @Min(1) @Max(maximumAge) private int minimumAge; @Min(minumumAge) @Max(99) private int maximumAge; 但是这个验证框架似乎不可能,因为它只能采用常量表达式.有没有办法做这样的事情? 谢谢! 解决方法
正如Zack所说,你可以使用自定义约束.
使用Hibernate Validator,您可以使用@ScriptAssert约束,它允许使用任何JSR 223兼容的脚本引擎定义约束: @ScriptAssert(lang = "javascript",script = "_this.minimumAge < _this.maximumAge") public class MyBean { @Min(1) private int minimumAge; @Max(99) private int maximumAge; } 如果您确实需要以动态方式声明约束,则可以使用Hibernate Validator的API进行编程约束定义: int dynamicallyCalculatedConstraintValue = ...; ConstraintMapping mapping = new ConstraintMapping(); mapping.type( MyBean.class ) .property( "mininumAge",FIELD ) .constraint( new MaxDef().value( dynamicallyCalculatedConstraintValue ) ); HibernateValidatorConfiguration config = Validation.byProvider( HibernateValidator.class ).configure(); config.addMapping( mapping ); Validator validator = config.buildValidatorFactory().getValidator(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |