@Min 和 @Max 支持 long、int、short、byte 及其包装类,以及 BigInteger 和 BigDecimal(需 value 可安全转为 long;否则推荐用 @DecimalMin/@DecimalMax)。

在 Java 中,@Min 和 @Max 是 Bean Validation(JSR 303/JSR 380)规范提供的内置约束注解,用于校验数值类型字段的最小值和最大值边界。它们不能直接用在方法参数或返回值上(除非配合 Spring 的 @Valid 或 @Validated),主要作用于实体类的字段或属性。
支持的类型有哪些
@Min 和 @Max 支持以下类型:
-
long、int、short、byte及其包装类(Long、Integer等) BigInteger-
BigDecimal(注意:@Min/@Max的value参数必须是long类型,所以对BigDecimal校验时需确保值能安全转为long;否则建议用@DecimalMin/@DecimalMax)
基本用法示例
在实体类字段上添加注解即可:
public class Product {
@Min(value = 1, message = "价格不能小于 1 元")
@Max(value = 99999, message = "价格不能超过 99999 元")
private BigDecimal price;
@Min(0)
private int stock;
// getter/setter...
}
注意:@Min 和 @Max 的 value 是 long 类型,所以写 @Min(1) 实际等价于 @Min(value = 1L)。
立即学习“Java免费学习笔记(深入)”;
配合 Spring Boot 使用(自动校验)
Spring Boot 默认集成 Hibernate Validator,只需在 Controller 方法参数上加 @Valid,并确保字段有对应注解:
@PostMapping("/products")
public ResponseEntity<String> create(@Valid @RequestBody Product product) {
return ResponseEntity.ok("创建成功");
}
若校验失败,Spring 会抛出 MethodArgumentNotValidException,可全局捕获并返回友好错误信息。
常见注意事项
⚠️ 注意以下几点避免踩坑:
- 字段必须为可比较的数值类型,
String或Object会直接报ConstraintDeclarationException -
null值默认不触发@Min/@Max校验(即跳过),如需非空+范围校验,应额外加上@NotNull - 对浮点数(
float/double)不推荐使用@Min/@Max,应改用@DecimalMin/@DecimalMax,因为后者支持字符串形式的精度值(如"0.01") - 自定义错误消息建议用属性文件(如
ValidationMessages.properties)管理,便于国际化


















