Spring Boot starter validation参数校验不触发MethodArgumentNotValidException问题
问题根因
核心是依赖版本冲突:
- 父依赖Spring Boot 2.5.4 与手动指定的
spring-boot-starter-validation:2.4.2版本不匹配 - 额外手动引入的
validation-api、hibernate-validator、javax.el依赖和starter内置的依赖版本冲突,导致校验器没有正确初始化
修复步骤
1. 清理pom.xml的校验相关依赖
删除以下三个手动引入的依赖:
<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.13.Final</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.el</artifactId> <version>3.0.0</version> </dependency>
同时去掉spring-boot-starter-validation的版本号,由父依赖统一管理版本:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2. 刷新Maven依赖
清理Maven本地缓存,重新拉取依赖后重启项目即可。
可选适配(如果仍不生效)
如果清理后还是提示@Valid等注解不存在,检查IDE的Maven配置是否开启了「离线模式」,关闭离线模式重新同步即可。
验证效果
重新发送测试请求,会正常返回400错误,响应体示例如下:
{ "name": "MethodArgumentNotValidException", "description": "Minimum 2 letters, max 50" }
如果需要返回所有校验错误信息,调整全局异常处理器的逻辑遍历e.getBindingResult().getFieldErrors()拼接即可。
内容的提问来源于stack exchange,提问作者Sebastián Villegas
相关产品推荐
相关产品推荐

