@size是标准注解,可校验字符串长度及集合、数组、map大小;@length是hibernate validator扩展注解,仅支持string且非标准。

@Size 和 @Length 是 Bean Validation(JSR 303/380)中常用的注解,但它们的适用场景有明确区分:只有 @Size 能校验集合(List、Set、Map 等)的元素个数,而 @Length 仅适用于字符串(String),且不是标准规范的一部分——它属于 Hibernate Validator 的扩展注解。
@Size:校验集合大小与字符串长度的通用选择
@Size 是标准注解,支持多种类型:String、Collection、Map、Array 等。它通过 min 和 max 属性定义边界。
- 对
String:校验字符长度(等价于str.length()) - 对
List<t></t>或Set<t></t>:校验元素个数 - 对
Map<k></k>:校验键值对数量 - 对数组(如
String[]):校验元素个数
示例:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
public class UserForm {
@Size(min = 2, max = 20, message = "用户名长度必须在2-20之间")
private String username;
@Size(min = 1, max = 5, message = "最多选5个标签")
private List<string> tags;
@Size(min = 0, max = 3, message = "附件不能超过3个")
private MultipartFile[] attachments;
}
</string>
@Length:仅限字符串,且非标准,需注意依赖
@Length 是 Hibernate Validator 特有的注解(位于 org.hibernate.validator.constraints.Length),**不支持集合或数组**,只作用于 String 类型。它语义更聚焦于“字符串长度”,属性名也更直观(min/max 含义与 @Size 一致)。
- 优势:命名更语义化,适合纯字符串校验场景
- 劣势:绑定 Hibernate Validator 实现,换用其他 Provider(如 Apache BVal)时可能失效
- 若项目已引入
hibernate-validator,可放心使用;否则建议统一用@Size
示例:
public class Comment {
@Length(min = 1, max = 500, message = "评论内容长度必须在1-500字之间")
private String content;
}
常见误区与注意事项
-
@Size对String校验的是length(),不是字节数,中文字符也算 1 个长度单位 - 空字符串
""的@Size(min = 1)校验会失败;若允许空值,需额外加@NotBlank或@NotNull控制逻辑 - 集合为
null时,@Size默认不报错(除非显式设置message并配合@NotNull) - Spring Boot 项目中,确保 Controller 方法参数加了
@Valid或@Validated,否则注解不生效
如何选择?一句话总结
需要校验集合、数组或 Map 大小 → 必须用 @Size;只校验字符串且追求语义清晰、确定使用 Hibernate Validator → 可选 @Length;追求可移植性和一致性 → 全部统一用 @Size 即可。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










