@min和@max是jsr-380中校验数值范围的注解,支持number子类型及可解析数字的string;value必须为long型整数,小数需用@decimalmin/@decimalmax;需配合@valid和校验依赖使用,null值默认不校验。

@Min 和 @Max 是 Java Bean Validation(JSR-380)标准中用于校验数值范围的核心注解,适用于对数字类型字段做上下界限制。它们不校验字符串长度或集合大小,只关注“数值大小”本身。
@Min 和 @Max 的适用类型
这两个注解支持所有实现了 java.lang.Number 接口的类型,包括:
- 基本类型的包装类:Integer、Long、Short、Byte、BigDecimal、BigInteger
- 原始类型(int、long 等)在字段为包装类时更稳妥,避免 null 值导致 NPE
- String 类型(仅当内容可解析为有效数字时才参与校验,例如 "123" 可转成整数,"abc" 会直接校验失败)
基本用法与常见写法
直接在字段上标注即可,value 值必须是 long 类型(整数),小数需改用 @DecimalMin/@DecimalMax:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
@Min(0)→ 字段值 ≥ 0 -
@Max(100)→ 字段值 ≤ 100 -
@Min(value = 1L)→ 显式声明 long 类型,更清晰 - 不能写
@Min(3.5),会编译报错;小数范围请用@DecimalMin("3.5")
配合 Controller 使用的关键点
要让 @Min/@Max 生效,需满足两个条件:
- 在 Controller 方法参数上添加
@Valid或@Validated - 确保项目已引入校验依赖(如 Hibernate Validator)
- 建议搭配
BindingResult捕获错误,或配置全局异常处理器统一返回提示
示例:
public ResponseEntity> createOrder(@Valid @RequestBody OrderRequest request, BindingResult result) {if (result.hasErrors()) {
return ResponseEntity.badRequest().body(result.getAllErrors());
}
// 处理业务逻辑
}
注意容易踩的坑
- String 字段加 @Min(10) 不代表“字符串长度≥10”,而是尝试把字符串转成数字后比较——比如 "5" 会校验失败,“15” 才通过
- 字段为 null 时,@Min/@Max 默认不报错(因为不是空值校验注解),如需非空+范围校验,应组合使用 @NotNull + @Min
- Spring Boot 2.3+ 默认移除了 validation starter,需手动添加
spring-boot-starter-validation










