@size 是 bean validation 标准注解,用于校验字符串长度及集合、数组、map 等容器的元素个数,支持 min/max 限制,默认不校验 null,需配合 @notnull 等使用。

@Size 是 Bean Validation(JSR 303/JSR 380)规范中用于校验对象大小的注解,适用于字符串、集合、数组、Map 等类型,可同时限制最小和最大长度(或元素个数)。
支持的类型和基本用法
@Size 可作用于以下常见类型:
- String:校验字符长度(注意不是字节数)
- List / Set / Collection:校验元素个数
- Array:校验数组长度
- Map:校验键值对数量
示例:
public class User {@Size(min = 2, max = 20, message = "用户名长度必须在2-20个字符之间")
private String username;
@Size(max = 5, message = "最多选择5个标签")
private List
}
注意 min/max 的默认值和空值处理
@Size 的 min 默认为 0,max 默认为 Integer.MAX_VALUE,所以只写 @Size(max = 10) 即表示“最多10个”,不限制下限。
它**不校验 null 值**——如果字段为 null,@Size 默认通过校验。如需禁止 null,需额外配合 @NotNull 或 @NotBlank(对 String)使用:
@NotBlank(message = "用户名不能为空")@Size(min = 2, max = 20)
private String username;
与 @Length 的区别(常见误区)
@Length 是 Hibernate Validator 特有的扩展注解(非标准),仅支持 String 类型,语义更聚焦于“字符串长度”。而 @Size 是标准注解,语义更通用(size 指“尺寸/数量”),且支持多种容器类型。
项目中优先使用 @Size,除非你明确依赖 Hibernate Validator 且需要 @Length 提供的额外特性(如 encoding 支持)。
在 Spring Boot 中启用和触发校验
确保实体类字段所在方法参数或对象被 Spring 的校验机制捕获:
- Controller 方法参数加 @Valid 或 @Validated
- 字段校验失败时抛出 MethodArgumentNotValidException(REST 接口需自定义全局异常处理器返回友好提示)
- 确保项目引入了 validation-api 和实现(如 spring-boot-starter-validation)











