Spring Boot参数校验核心四主线:谁来校验(@Validated/@Valid)、在哪校验(RequestBody用参数注解,RequestParam/PathVariable需类级@Validated)、怎么校验(@NotBlank/@Min/@Email等高频注解+分组)、出错怎么办(捕获MethodArgumentNotValidException和ConstraintViolationException统一处理)。

画 Spring Boot 参数校验的思维导图,核心是围绕“谁来校验、在哪校验、怎么校验、出错怎么办”四条主线展开,结构清晰、重点突出,不堆砌概念,只保留开发中真正用得上的节点。
校验场景分类
先分两大类,避免后续混淆:
-
RequestBody 校验:适用于 POST/PUT 接口,参数封装在 DTO 中,用
@Validated或@Valid注解在方法参数上即可触发 -
RequestParam / PathVariable 校验:适用于 GET 请求或路径变量,需在 Controller 类上加
@Validated,再对单个参数加@NotBlank、@Min等注解
常用校验注解速查
按使用频率和实用性归类,不列冷门注解:
-
基础非空与长度:
@NotNull(对象非 null)、@NotBlank(字符串非空且非空白)、@Size(min=1, max=20)(集合/字符串长度) -
数值约束:
@Min(0)、@Max(999)、@DecimalMin("0.01") -
格式校验:
@Email、@Pattern(regexp = "^1[3-9]\d{9}$") -
分组校验(进阶):定义接口如
public interface Add {},DTO 字段标注@NotBlank(groups = Add.class),方法参数用@Validated(Add.class)
异常统一处理
校验失败默认返回 400,但生产环境必须自定义响应体:
- 全局捕获
MethodArgumentNotValidException(RequestBody 失败) - 全局捕获
ConstraintViolationException(RequestParam/PathVariable 失败) - 提取错误信息建议用
BindingResult.getFieldError().getDefaultMessage()或遍历constraintViolations获取详细字段+消息
依赖与版本注意点
避免踩坑的关键细节:
- Spring Boot ≤ 2.2.x:starter-web 自带 hibernate-validator,无需额外引入
- Spring Boot ≥ 2.3.x:
spring-boot-starter-validation已拆出,必须显式添加依赖 - 若用 Lombok 的
@Data,注意@Validated需作用于 DTO 类本身(而非仅字段),否则部分注解可能失效


















