@Size是JSR 380标准注解,通用校验字符串、集合、数组等的元素个数;@Length是Hibernate Validator特有注解,仅校验字符串Unicode字符长度,语义专一但类型受限。

@Size 和 @Length 都用于长度限制,但适用场景、语义和底层逻辑不同,配置方式也需区分对待。
@Size 注解:通用大小校验(推荐优先使用)
属于 JSR 380(Bean Validation)标准注解,支持多种类型,校验的是“元素个数”或“字符数量”(对 String 而言等价于字符长度,但逻辑上是“长度”而非“字节数”)。
- 适用类型:String、数组、List、Set、Map(校验其 size() 或 length)
- 配置方式统一:
@Size(min = 1, max = 20) - 允许为 null(不触发校验),若非 null 才检查范围
- 示例:
@Size(min = 5, max = 20, message = "用户名长度必须在5-20个字符之间") private String username; @Size(min = 1, max = 10, message = "最多选择10个标签") private List<String> tags;
@Length 注解:Hibernate Validator 特有字符串长度校验
是 Hibernate Validator 提供的扩展注解,**仅适用于 String 类型**,语义更明确——专指“Unicode 字符个数”,与 @Size 对 String 的行为一致,但不可用于集合等其他类型。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 必须搭配
org.hibernate.validator.constraints.Length(旧版)或org.hibernate.validator.constraints.Length(新版中已迁至jakarta.validation.constraints.Size的替代方案,但仍有项目沿用) - 配置方式:
@Length(min = 6, max = 32) - 同样忽略 null 值
- 示例:
@Length(min = 6, max = 32, message = "密码至少6位,最多32位") private String password;
关键区别与配置建议
不要混用或凭感觉选——看你要校验的对象类型:
- 要校验 字符串、列表、数组、Map 的元素数量 → 用 @Size(标准、通用、无依赖风险)
- 只校验 字符串长度,且团队习惯用 @Length(比如老项目或强调语义清晰)→ 可用 @Length,但需确认依赖中含 Hibernate Validator
- 数据库列长度同步?
@Column(length = 50)是 JPA 元数据,不影响运行时校验,需单独配 @Size 或 @Length - 中文、emoji 等多字节字符?两者都按 Unicode 字符计数(如一个 emoji 算 1 个 length/size),不是字节数
基础配置前提
确保项目已引入校验依赖(Spring Boot 2.3+ 默认不包含,需显式添加):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
并在控制器参数上加 @Valid 或 @Validated 才会触发校验。

















