@Digits用于限制数字字段的整数位和小数位数,支持BigDecimal、String、int等类型,但不适用于double/float;校验基于字符串表示形式,如integer=5允许"00123.40",fraction=2拒绝"3.141";可与@DecimalMin等组合使用控制数值范围。

@Digits 是 Jakarta Bean Validation(原 Hibernate Validator)提供的一个注解,用于限制数字类型字段的整数位数和小数位数。它适用于 BigDecimal、BigInteger、String、int、long 等可表示数字的类型,但**不适用于 double/float**(因浮点精度问题,校验不可靠)。
基本用法:指定整数位和小数位上限
通过 integer 和 fraction 属性分别设置整数部分最多几位、小数部分最多几位:
-
integer = 5:整数部分最多 5 位(如12345✅,123456❌) -
fraction = 2:小数部分最多 2 位(如3.14✅,3.141❌) - 注意:
@Digits校验的是**字符串形式的数字表示**,不是运行时数值大小。例如"00123.40"中整数位按"00123"计为 5 位,合法;而"123.456"小数位为 3 位,超限。
支持的字段类型示例
以下写法均有效(需配合 Validated 触发):
@Digits(integer = 4, fraction = 1) private BigDecimal price;@Digits(integer = 6, fraction = 0) private String serialNumber; // 如 "123456" ✅,"1234567" ❌@Digits(integer = 3, fraction = 2) private int count; // 实际校验的是 "123" 这种字符串表示
⚠️ 对于 double 或 float 字段,虽然语法上不报错,但不推荐使用,因为浮点数的二进制表示可能导致意外失败(如 1.23f 可能被转成 "1.22999999999999998")。
立即学习“Java免费学习笔记(深入)”;
与 @DecimalMax/@DecimalMin 的区别
@Digits 关注的是**位数格式**,而非数值范围:
-
@Digits(integer=2, fraction=1)允许"99.9"(最大值),也允许"-99.9"(负数同样适用) - 若还需控制数值上下界(如价格不能为负),应额外加
@DecimalMin("0.0") - 二者可共存:
@Digits(integer = 5, fraction = 2) @DecimalMin("0.01") private BigDecimal amount;
在 Spring Boot 中启用校验
确保引入依赖(Spring Boot 2.3+ 默认包含):
<dependency><groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Controller 中使用 @Valid 触发:
校验失败时抛出 MethodArgumentNotValidException,可全局捕获返回友好提示。


















