加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

基于变量的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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读