Java中@Min/@Max仅支持整数类型,@DecimalMin/@DecimalMax支持所有数字类型且value必须为字符串;均需配合@Valid/@Validated触发校验,对null默认不校验,常与@NotNull联用。

Java 中通过 @Min、@Max、@DecimalMin、@DecimalMax 校验数字范围,核心是使用 Bean Validation(JSR 303/380)规范提供的注解,在字段或方法参数上声明约束,并配合校验器触发检查。这些注解本身不自动生效,需搭配 @Valid 或 @Validated 触发校验逻辑。
适用类型与基本用法
这四个注解分别适用于不同数值类型,且对 null 值默认不做校验(即允许为空):
-
@Min(value = 10)和@Max(value = 100):仅支持long及其包装类(Long)、int/Integer等整数类型;不支持double、float或BigDecimal -
@DecimalMin(value = "10.5")和@DecimalMax(value = "99.99"):支持BigDecimal、BigInteger、double、float、int、long等所有数字类型;value 必须是字符串形式(如"10.5"),不能写成10.5(编译报错)
在实体类中声明校验规则
直接在字段上添加注解即可,例如:
public class Product {
@Min(value = 1, message = "商品ID必须大于0")
private Long id;
@Max(value = 999999)
private Integer stock;
@DecimalMin(value = "0.01", message = "价格不能低于0.01元")
private BigDecimal price;
@DecimalMax(value = "9999999.99")
private Double weight;
}
注意:@DecimalMin/@DecimalMax 的 value 是字符串,支持科学计数法(如 "1E2" 表示 100),也支持带符号("-10.5")。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
触发校验的常见方式
仅加注解不会自动校验,需显式调用校验器或借助框架集成:
-
手动校验:注入
javax.validation.Validator(Jakarta EE)或jakarta.validation.Validator(Jakarta EE 9+),调用validate() -
Spring MVC 控制器中:在参数前加
@Valid,并确保参数对象有对应注解;校验失败会抛出MethodArgumentNotValidException,可全局捕获返回友好提示 -
Service 层校验:方法参数加
@Valid,并在类上加@Validated(Spring 支持)
示例(Spring Boot Controller):
@PostMapping("/products")
public ResponseEntity<string> create(@Valid @RequestBody Product product) {
// 校验通过才执行
return ResponseEntity.ok("创建成功");
}</string>
注意事项和常见坑
实际使用中容易忽略以下细节:
- 注解对
null值默认跳过——若需禁止空值,要额外加上@NotNull -
@Min/@Max不能用于BigDecimal字段,否则运行时报ConstraintDeclarationException;必须改用@DecimalMin/@DecimalMax - 使用 Lombok 的
@Data或@Setter时,确保 getter/setter 正常生成,否则某些校验器可能无法读取字段值 - Spring Boot 2.3+ 默认移除了
spring-boot-starter-validation的自动依赖,需手动引入:org.springframework.boot:spring-boot-starter-validation
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










