@min和@max是spring boot中基于jsr 380的标准数值范围校验注解,分别限制字段值不小于最小值、不大于最大值,支持number子类及可解析数字字符串,需配合@notnull等注解处理null值,且控制器需添加@valid才生效。

@Min 和 @Max 是 Spring Boot 中基于 Bean Validation(JSR 380)规范的标准校验注解,专用于限制数值型字段的取值边界,简单直接、语义清晰。
@Min 和 @Max 的基本用法
这两个注解作用于字段或方法参数,分别约束值不能小于指定最小值、不能大于指定最大值。它们支持所有 Number 子类(如 Integer、Long、BigDecimal、Double),也支持可转为数字的字符串(如 "18")。
- @Min(18) 表示值必须 ≥ 18;若传入 17 或 null(且字段未加 @NotNull),校验失败
- @Max(65) 表示值必须 ≤ 65;若传入 66 或 "100"(字符串被自动解析后超限),同样触发错误
- message 属性可自定义提示,例如
@Min(value = 12, message = "年龄不能低于12岁")
和 @Range 的区别
@Range 是 Hibernate Validator 提供的扩展注解,功能上等价于同时使用 @Min 和 @Max,但写法更紧凑:
-
@Range(min = 12, max = 20)一行替代两行,适合边界成对出现的场景 - @Min/@Max 更灵活:可单独使用(比如只要求“不低于”)、可复用在不同字段、支持不同 message
- @Range 不是 JSR 标准,需确保项目引入了
hibernate-validator依赖
常见配合与注意事项
单靠 @Min/@Max 无法处理 null 值,默认允许 null 通过校验。实际业务中常需组合其他注解:
- 搭配 @NotNull:防止空值绕过数字范围检查
- 搭配 @DecimalMin/@DecimalMax:当需要精确控制 BigDecimal 或浮点数精度时(@Min/@Max 对 double/float 有精度风险)
- 控制器层需添加 @Valid 或 @Validated 才会真正触发校验,否则注解不生效
- 前端传参为字符串时,Spring 会尝试类型转换;转换失败(如 "abc")会先报类型错误,不进入 @Min/@Max 校验环节
适用字段类型一览
以下类型可直接使用 @Min/@Max:
- 基本包装类:Integer、Long、Short、Byte
- 高精度数值:BigDecimal、BigInteger
- 浮点类型:Double、Float(注意舍入误差)
- String(内容为纯数字,如 "42"、"-5")
不支持 Boolean、LocalDate、List 等非数值类型;字符串长度校验请用 @Size 或 @Length。











