1

我想验证传入的数字是否是整数值(没有分数),介于 0 和 100 之间。

我有 javax.validation 注释的 dto:

@Min(value = 1, message = "some msg")
@Max(value = 100, message = "some msg")
@Digits(integer = 3, fraction = 0, message = "some msg")
private int someField;

Dto 在@RestController 类中用作输入方法(@PostMapping)参数。

@Min 和 @Max 工作正常,但 @Digits 不行。当我发送数字时,例如 95.5,它会转换为 95 并引发任何异常。为什么@Digits 不检查它?

4

2 回答 2

0

我遇到了同样的问题,通过使用 BigDecimal 而不是 BigInteger/Integer/int 得到了解决。正如您将其定义为 int ,它将自动删除小数,然后应用验证。尝试使用其中包含小数部分的数据类型,如 BigDecimal。@Digit 将与 BigDecimal 一起使用。

于 2021-09-29T09:50:28.500 回答
0

“someField”的类型是 int,因此当您传递值 95.5 时,它会通过忽略小数部分而转换为 int。如果您将 someField 的类型更改为包装类型,如 BigDecimal、BigInteger 等,那么它应该可以按预期工作。

于 2020-12-29T11:02:35.020 回答