gpt4 book ai didi

休眠验证器 6 : Weird behavior of the @Max annotation with a BigDecimal set on a Number field

转载 作者:行者123 更新时间:2023-12-01 13:16:02 26 4
gpt4 key购买 nike

我想我可能在 hibernate-validator 6.0.15.Final 中发现了一个奇怪的地方。它曾经适用于 5.4.2.Final 版本。

这是一个测试例子:

import lombok.Data;
import org.junit.Test;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.constraints.Max;
import java.math.BigDecimal;
import java.util.Set;

import static org.assertj.core.api.Assertions.assertThat;

public class ValidTest {

@Data
static class ClassToValidate{

public ClassToValidate() {
failingNumber = new BigDecimal("1.001");
failingBigDecimal = new BigDecimal("1.001");

passingNumber = new BigDecimal("0.001");
passingBigDecimal = new BigDecimal("0.001");
}

@Max(1)
private Number failingNumber;

@Max(1)
private BigDecimal failingBigDecimal;

@Max(1)
private Number passingNumber;

@Max(1)
private BigDecimal passingBigDecimal;
}

@Test
public void test(){
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Set<ConstraintViolation<ClassToValidate>> violations = validator
.validate(new ClassToValidate());

for (ConstraintViolation<ClassToValidate> violation : violations) {
System.out.println(violation);
}
assertThat(violations).hasSize(2);
}

}

存储在 Number 字段中的 BigDecimal 不会触发约束异常,即使它大于 1。而像 2.xxx 这样的 bigdecimal 会。

感觉验证器(不再)考虑存储在 Number 中的 BigDecimals 对象中逗号后的数字。

最佳答案

嗯,你是对的,我们这里有一个错误:当你像你一样使用数字作为声明的类型时,我们最终会比较长整型。不过,这应该很容易解决。

我看到你填满了https://hibernate.atlassian.net/browse/HV-1699 ,我们会在那里为您提供更新。

一旦我们有修复,我会发布一个版本,因为它肯定是一个糟糕的版本。

关于休眠验证器 6 : Weird behavior of the @Max annotation with a BigDecimal set on a Number field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54937243/

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