如何为Spring的@RequestHeader参数添加空字符串校验?
Spring请求头参数非空(含空格)校验方案
核心问题原因
@NotBlank这类Bean Validation注解默认不会触发单个@RequestHeader参数的校验,必须通过@Validated注解开启方法级别的校验。
方案一:直接在方法参数上配合@Validated
- 在控制器类上添加
@Validated注解,开启方法参数的校验功能 - 在
@RequestHeader参数上同时标注@NotBlank
示例代码:
import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RestController; import javax.validation.constraints.NotBlank; @Validated // 必须添加这个注解触发校验 @RestController public class DemoController { @GetMapping("/test") public String test(@RequestHeader(name = "token", required = true) @NotBlank String token) { return "Token: " + token; } }
当请求头token为空、仅含空格时,Spring会抛出ConstraintViolationException,你可以全局捕获该异常返回统一的错误响应。
方案二:封装请求头到DTO类(适合多请求头校验场景)
如果需要校验多个请求头,推荐封装成DTO类配合@Valid使用:
- 创建DTO类并添加校验注解:
import javax.validation.constraints.NotBlank; import org.springframework.web.bind.annotation.RequestHeader; public class HeaderDTO { @NotBlank @RequestHeader(name = "token") private String token; // 生成getter、setter方法 }
- 控制器方法中使用
@Valid校验DTO:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; @RestController public class DemoController { @GetMapping("/test") public String test(@Valid HeaderDTO headerDTO) { return "Token: " + headerDTO.getToken(); } }
依赖说明
确保项目中引入了Bean Validation的依赖,Spring Boot项目可直接引入:
<!-- Maven依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
内容的提问来源于stack exchange,提问作者Alfredo Morales
相关产品推荐
相关产品推荐

