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

升级Spring Boot到2.5.4后Kotlin data class的@field:NotBlank失效如何解决

问题背景

现有技术栈为 JDK 14、Spring Boot 2.2.8.RELEASE、Kotlin 1.5.31,定义如下请求类,firstName或lastName为空时可正常触发校验抛出错误:

data class ChangeInformationRequest(
    @field:NotBlank var firstName: String,
    @field:NotBlank var lastName: String,
    @field:Valid var address: Address?
)

升级到Spring Boot 2.5.4版本后,上述校验逻辑不再触发,未抛出预期错误。

问题成因
  • 核心原因:Spring Boot 从2.3.0版本开始,将校验组件从spring-boot-starter-web的默认依赖中移除,独立为单独的spring-boot-starter-validation starter。升级到2.5.4版本后如果没有手动引入该依赖,所有校验逻辑默认不会生效。
  • 次要排查点:若已引入校验依赖仍不生效,大概率是注解包名不兼容:Spring Boot 2.5.x仍使用Java EE规范的javax.validation系列注解,若错误引入了Jakarta EE规范的jakarta.validation注解,会导致原有注解无法被校验组件识别。
解决方案
  1. 手动添加校验依赖
    Maven配置示例:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    
    Gradle配置示例:
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    
  2. 校验注解包名一致性检查
    确保请求类中所有校验注解的包名是javax.validation.constraints.NotBlank,而非jakarta.validation.constraints.NotBlank,你当前代码中使用的@field:NotBlank前缀无需修改,该前缀是Kotlin场景下让注解作用在类字段上的必要写法,符合要求。
  3. Controller层校验触发检查
    确认接收ChangeInformationRequest参数的接口方法上,参数前标注了@Valid或@Validated注解,分组校验场景还需要在Controller类上补充@Validated注解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:45:07