spring boot 中 @pathvariable 校验需在控制器类加 @validated 才生效,支持 @min、@max、@pattern、@notblank 等注解,不支持 @size;url 正则匹配属路由层过滤,异常需捕获 methodargumentnotvalidexception 统一处理。

Spring Boot 中对 URL 路径参数(即 @PathVariable)校验,核心是结合 Bean Validation 注解(如 @Min、@Pattern)与 @Validated 启用机制,不能只靠注解堆砌,必须满足启用条件才能触发校验。
必须加 @Validated 类级别注解
仅在 @PathVariable 参数上写 @Min(1) 是无效的。Spring MVC 默认不会对单个路径变量做 JSR-303 校验,需显式开启方法级参数校验支持:
- 控制器类顶部添加
@Validated(不是@Valid) - 否则即使写了
@Min或@NotBlank,校验逻辑完全不执行 - 这是最容易忽略、导致“校验失效”的根本原因
支持的校验注解类型
可用于 @PathVariable 的常见注解包括:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
@Min/@Max:适用于数值型(Long、Integer等),例如@PathVariable @Min(1) Long id -
@Pattern:适用于字符串路径变量,例如@PathVariable @Pattern(regexp = "[a-z]+") String code -
@NotBlank/@NotNull:对字符串或包装类型有效,但注意原始类型(如long)无法为null,慎用@NotNull - 不支持
@Size作用于单个基本类型路径变量(因@Size设计用于集合/数组/字符串长度)
URL 正则约束(服务端路由层过滤)
在路径定义中直接加正则,属于 Spring MVC 路由匹配阶段的前置过滤,非 Bean Validation:
- 写法:
@GetMapping("/user/{id:\d+}")或@GetMapping("/group/{name:[a-zA-Z0-9_]+}") - 效果:不满足正则时,请求根本进不到 Controller 方法,直接返回 404
- 缺点:无法自定义错误响应格式,也不能统一捕获处理;适合做粗粒度格式拦截(如确保
id全是数字)
异常统一处理要覆盖 MethodArgumentNotValidException
当路径变量校验失败时,Spring 抛出 MethodArgumentNotValidException(不是 ConstraintViolationException):
- 全局异常处理器中需明确捕获该异常类型
- 通过
exception.getBindingResult().getAllErrors()提取错误信息 - 避免和
@RequestBody校验共用同一套错误提取逻辑时出现空指针(因路径变量错误对象结构略有不同)










