spring boot自定义响应头有三种方式:1.单接口用httpservletresponse动态添加;2.接口级用responseentity统一设状态码、多头和响应体;3.全局统一用@crossorigin、拦截器或responsebodyadvice。

Spring Boot 中自定义 REST 接口响应头有多种方式,选哪种取决于你是否需要局部控制、全局统一,还是兼顾状态码与响应体。下面分三类常用场景说明,直接可上手。
单个接口动态加响应头(最轻量)
不需要改返回类型,也不用包装成 ResponseEntity,只需在方法参数中注入 HttpServletResponse,调用 addHeader() 或 setHeader() 即可。
-
setHeader(name, value):覆盖同名已有头(适合唯一值,如X-Request-ID) -
addHeader(name, value):允许添加多个同名头(适合 CORS 的Access-Control-Allow-Origin等) - 不影响 Spring 自动序列化——仍可直接返回
List<user></user>、String或任意 POJO
接口级精细控制(带状态码+多头+响应体)
用 ResponseEntity 构建完整响应,适合需要显式指定 HTTP 状态、多个响应头、或非 200 成功码的场景。
- 链式调用
.header("X-Custom", "abc")添加任意数量头 - 支持
.status(HttpStatus.CREATED)等语义化状态设置 - 返回体仍可为对象,Spring 自动 JSON 序列化(无需手动转字符串)
跨域或通用头统一配置(避免重复写)
如果多个接口都需要同一类响应头(如 CORS、Cache-Control、Content-Type 默认值),推荐以下方式:
-
@CrossOrigin 注解:快速启用跨域,自动注入
Access-Control-Allow-Origin等头(支持类/方法级) - WebMvcConfigurer.addInterceptors() + 自定义拦截器:在 preHandle 或 afterCompletion 中统一写头
- ResponseBodyAdvice:对所有 @ResponseBody 返回值统一增强,适合加审计头、版本头等
不复杂但容易忽略:局部用 HttpServletResponse 最省事;要带状态码或需复用逻辑时,ResponseEntity 更稳妥;高频共性头建议抽到拦截器或 Advice 层。











