@Size注解用于校验字符串字符数(非字节),需引入jakarta.validation-api和hibernate-validator依赖,并通过@Valid触发;常与@NotBlank组合使用以同时校验null、空白及长度。

Java 中用 @Size 注解校验字符串长度,核心是作用在字段上,指定 min 和 max 属性,并确保类启用了 Bean Validation(如 Spring Boot 项目默认支持)。
需要满足的前提条件
@Size 属于 Jakarta Bean Validation 规范(原 Java Bean Validation),不是 JDK 自带注解。使用前需确认:
- 项目已引入验证 API 依赖(如
jakarta.validation-api) - 有实现框架(如
hibernate-validator)参与运行时校验 - 校验逻辑被主动触发(例如 Spring MVC 自动校验
@Valid参数,或手动调用Validator#validate())
@Size 的基本用法(字符串长度)
对字符串字段标注 @Size,直接控制字符数量(注意:是 Unicode 字符个数,不是字节数):
public class User {
@Size(min = 2, max = 20, message = "用户名长度必须在2到20个字符之间")
private String username;
// getter/setter...
}
说明:
立即学习“Java免费学习笔记(深入)”;
-
min和max均为可选,可只设一个(如仅限制最大长度:@Size(max = 50)) -
message支持占位符,如{min}、{max},会自动替换为配置值 - 空字符串
""长度为 0,会被min = 1拒绝;null值默认跳过@Size校验(除非额外加@NotNull)
与 @NotBlank / @NotNull 的配合使用
@Size 不校验 null 或空白,常见组合写法:
@NotBlank(message = "用户名不能为空或仅空白字符") @Size(min = 2, max = 20, message = "用户名长度必须在2到20个字符之间") private String username;
这样能覆盖三种情况:
-
null→@NotBlank拦截 -
" "(纯空格)→@NotBlank拦截 -
"a"(长度不足)或"abc...xyz"(超长)→@Size拦截
在 Spring MVC 中触发校验
Controller 方法参数加上 @Valid 即可激活:
@PostMapping("/users")
public ResponseEntity<?> createUser(@Valid @RequestBody User user) {
return ResponseEntity.ok().build();
}
若校验失败,Spring 默认返回 400 Bad Request 并携带错误信息(可通过 @ExceptionHandler(MethodArgumentNotValidException.class) 统一处理)。


















