You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Springboot中BindingResult hasErrors始终返回false问题求助

Spring Boot 参数校验不生效排查方案

问题现象

已引入hibernate-validation、spring validation相关依赖,但参数校验功能不生效,bindingResult.hasErrors()始终返回false,传入lastName为空字符串时未触发@NotBlank校验规则。

现有依赖列表

  • javax.validation:validation-api:2.0.1.Final
  • org.hibernate.validator:hibernate-validator:6.0.18.Final
  • org.springframework.boot:spring-boot-starter-validation:2.1.13.RELEASE
  • com.github.java-json-tools:json-schema-validator:2.2.8
  • io.springfox:springfox-bean-validators:2.9.2

排查解决步骤

  • 清理重复依赖,解决版本冲突
    spring-boot-starter-validation已经内置了适配当前Spring Boot版本的validation-api和hibernate-validator,手动额外引入的两个校验依赖大概率和starter内置版本不兼容。先移除手动引入的javax.validation:validation-api和org.hibernate.validator:hibernate-validator,仅保留starter依赖即可。
  • 检查校验注解包导入是否正确
    确认MyClass类中@NotBlank注解导入的是javax.validation.constraints.NotBlank,而非第三方包下的同名注解,避免注解不被标准校验器识别。
  • 检查实体类字段访问权限
    校验器需要通过Getter方法读取字段值进行校验,如果MyClass仅使用了Lombok的@Builder注解,未添加@Getter/@Data注解,私有字段无法被校验器访问,会直接跳过校验。需要给MyClass补充对应字段的Getter方法,或添加Lombok的@Getter注解。
  • 确认BindingResult参数位置正确
    BindingResult必须紧跟在被@Valid修饰的参数之后,中间不能插入其他参数,否则Spring无法将校验结果注入到BindingResult对象中。当前代码参数顺序是正确的,若后续调整参数需要注意该规则。
  • 检查WebMvc配置是否覆盖默认校验逻辑
    如果项目中存在自定义WebMvcConfigurer实现类,检查是否重写了getValidator()、configureMessageConverters()等方法,若手动配置了消息转换器或校验器,没有正确注入标准LocalValidatorFactoryBean,会导致@RequestBody参数校验失效。如果没有特殊需求,不要重写上述方法,保留Spring Boot自动配置即可。
  • 排查第三方依赖冲突
    暂时移除io.springfox:springfox-bean-validators依赖后重试校验,低版本的swagger校验扩展包会和Spring Boot原生校验逻辑产生冲突。如果移除后校验生效,可以升级该依赖版本,或者排除该包传递引入的校验相关依赖。
  • 断点确认反序列化结果
    在控制器方法入口打断点,查看myClass的lastName字段实际值,确认JSON反序列化时没有把空字符串转为null,排除反序列化配置导致的校验条件不匹配问题。

内容的提问来源于stack exchange,提问作者david

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:27:00