Spring中@NotBlank注解对空字符串与null未触发验证问题排查
问题原因与解决方案
核心问题是你的RestController类未添加@Validated注解,导致方法参数上的@Valid注解无法触发校验逻辑,所以即使请求体不符合约束,也会直接进入方法返回200。
为什么会这样?
Spring Boot中,要让@RequestBody参数的Jakarta Validation(原JSR-380)注解(比如@NotBlank)生效,必须同时满足两个条件:
- 项目引入
spring-boot-starter-validation依赖(你已经正确添加) - 控制器类上标注
@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
相关产品推荐
相关产品推荐

