gpt4 book ai didi

基于变量的javax Bean验证?

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:32 24 4
gpt4 key购买 nike

假设我有一个包含两个成员变量的类:

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

关于基于变量的javax Bean验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com