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

Spring中@NotBlank注解对空字符串与null未触发验证问题排查

问题原因与解决方案

核心问题是你的RestController类未添加@Validated注解,导致方法参数上的@Valid注解无法触发校验逻辑,所以即使请求体不符合约束,也会直接进入方法返回200。

为什么会这样?

Spring Boot中,要让@RequestBody参数的Jakarta Validation(原JSR-380)注解(比如@NotBlank)生效,必须同时满足两个条件:

  1. 项目引入spring-boot-starter-validation依赖(你已经正确添加)
  2. 控制器类上标注@Validated注解,开启方法级别的参数校验

另外补充:你的Request类字段使用String?可空类型,@NotBlank本身已包含「非null + 非空白」的校验逻辑,所以这个写法没问题,但如果希望Jackson在反序列化时直接拒绝null值,可以将字段改为非空String类型(去掉?)。

修复步骤

1. 给控制器添加@Validated注解

@RestController
@Validated // 新增这个注解
class SmsController { // 替换成你的控制器类名
    @PostMapping(path = [CONTROLLER_PATH])
    fun post(
        @RequestBody(required = true) @Valid sendSmsTask: Request,
    ) : String {
        return UUID.randomUUID().toString()
    }
}

2. (可选)优化Request类字段类型

如果希望严格限制参数不能为null,可将字段改为非空类型:

import jakarta.validation.constraints.NotBlank

data class Request (
    @NotBlank
    val receiverNumberPhone: String, // 去掉?

    @NotBlank
    val text: String // 去掉?
)

修改完成后,再发送无效请求体,就会返回422状态码,并携带两个验证错误信息。

内容的提问来源于stack exchange,提问作者atom-22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:07:45