当使用bean验证来验证对象的状态时,用注释的方法@AssertTrue
每当调用验证时都会调用 4 次。每次调用只应调用一次。
Hibernate 验证器版本:5.1.3.Final
这是一个例子:
对于以下类别的摩托车:
import javax.validation.constraints.AssertTrue;
class Motorcycle{
private int fuel;
private int tireDurability;
@AssertTrue(message = "motorcycle.not.available.to.use")
public boolean isAvailable(){
return fuel > 0 && tireDurability > 0;
}
public void toUse(){...}
}
以及主要的:
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class Main{
public static void main(String []args){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<Motorcycle>> violations = validator.validate(new Motorcycle());
}
}
When validator.validate(new Motorcycle())
被调用,该方法isAvailable()
被调用4次。
任何人都可以帮助我解决这种情况吗?这是一个错误吗?我该如何解决这个问题?
您应该尝试使用 Hibernate Validator 6.0.2.Final(它是当前最新的可用版本)。下一个测试确实通过了这个(最新)版本的验证器:
@Test
public void testMotorcycle() throws Exception {
AtomicInteger count = new AtomicInteger( 0 );
Motorcycle motorcycle = new Motorcycle( count );
validator.validate( motorcycle );
assertEquals( motorcycle.count.get(), 1 );
}
class Motorcycle {
final AtomicInteger count;
private int fuel;
private int tireDurability;
Motorcycle(AtomicInteger count) {
this.count = count;
}
@AssertTrue(message = "motorcycle.not.available.to.use")
public boolean isAvailable() {
count.incrementAndGet();
return fuel > 0 && tireDurability > 0;
}
}
我也尝试用 5.1 运行它 - 并且它也通过了那里。您如何确定该方法被调用了 4 次?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)