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

如何为Spring的@RequestHeader参数添加空字符串校验?

Spring请求头参数非空(含空格)校验方案

核心问题原因

@NotBlank这类Bean Validation注解默认不会触发单个@RequestHeader参数的校验,必须通过@Validated注解开启方法级别的校验。

方案一:直接在方法参数上配合@Validated

  1. 在控制器类上添加@Validated注解,开启方法参数的校验功能
  2. 在@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使用:

  1. 创建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方法
}
  1. 控制器方法中使用@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:07:12