@Size用于校验字符串长度、集合/数组元素个数等是否在min和max指定范围内,支持String、Collection、Map、Array等类型,null值默认跳过校验,需配合@NotNull等使用。

@Size 是 Jakarta Bean Validation(原 Hibernate Validator)提供的注解,用于校验字符串长度、集合/数组元素个数等是否在指定范围内。它不只适用于字符串,也适用于 List、Set、Map、数组等可计算“大小”的类型。
基本用法:指定最小和最大长度
通过 min 和 max 属性设定合法范围,两者都支持默认值(min=0,max=Integer.MAX_VALUE):
-
字符串:校验字符数(不是字节数),例如
@Size(min = 2, max = 20)表示长度 2–20 个 Unicode 字符; -
集合/数组:校验元素个数,例如
@Size(min = 1, max = 5)表示至少 1 个、最多 5 个元素。
常见写法示例
以下是在实体类字段上的典型用法:
public class User {
@Size(min = 2, max = 20, message = "用户名长度必须在2到20之间")
private String username;
@Size(min = 1, message = "至少选择一个角色")
private List<string> roles;
@Size(max = 3)
private String[] tags;
}</string>
注意:message 可自定义错误提示;若不填则使用默认国际化消息。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
配合校验触发使用
@Size 不会自动生效,需显式调用校验器:
- Spring MVC 中,对控制器参数加
@Valid或@Validated即可触发; - 手动校验时,用
Validator.validate()方法; - 确保项目中已引入验证依赖(如
spring-boot-starter-validation)。
注意事项
容易忽略的关键点:
- 空字符串
""的长度为 0,会被min = 1拒绝;如需允许空值,应额外加@NotBlank或@NotNull控制逻辑; -
@Size对null值默认不报错(即跳过校验),除非同时加@NotNull; - 它不校验字符串内容(比如是否含空白),仅看长度或元素数量;
- Java 8+ 中,该注解属于
jakarta.validation.constraints.Size(Jakarta EE 9+),旧项目若用javax.*包需迁移。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










