主要分为两类,一是单个响应增加响应头,而是对所有响应增加响应头

单个响应

如果我们要在单个请求响应response增加header,可以使用httpServletResponse 或者 ResponseEntity objects.

Using HttpServletResponse
We simply have to add the HttpServletResponse object to our REST endpoint as an argument, then use the addHeader() method:

@GetMapping("/http-servlet-response")
public String usingHttpServletResponse(HttpServletResponse response) {response.addHeader("Baeldung-Example-Header", "Value-HttpServletResponse");return "Response with header using HttpServletResponse";
}

Using ResponseEntity

In this case, let's use the BodyBuilder provided by the ResponseEntity class:

@GetMapping("/response-entity-builder-with-http-headers")
public ResponseEntity<String> usingResponseEntityBuilderAndHttpHeaders() {HttpHeaders responseHeaders = new HttpHeaders();responseHeaders.set("Baeldung-Example-Header", "Value-ResponseEntityBuilderWithHttpHeaders");return ResponseEntity.ok().headers(responseHeaders).body("Response with header using ResponseEntity");
}

所有响应

1. 通过Filter

Now let's imagine we want to set a particular header to many of our endpoints.

Of course, it would be frustrating if we have to replicate the previous code on each mapping methods.

A better approach to accomplish this is by configuring a Filter in our service:

@Component
public class AddResponseHeaderFilter extends OncePerRequestFilter {@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,FilterChain filterChain) throws ServletException, IOException {httpServletResponse.addHeader("X-Frame-Options", "DENY");httpServletResponse.addHeader("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0");httpServletResponse.addHeader("Cache-Control", "no-cache='set-cookie'");httpServletResponse.addHeader("Pragma", "no-cache");filterChain.doFilter(httpServletRequest, httpServletResponse);}
}

2.通过Interceptor

public class HttpResponseInterceptorHandler implements HandlerInterceptor {// 实现HandlerInterceptor  或者 继承HandlerInterceptorAdapter都可以,如果想看着简洁就使用后者@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {response.addHeader("content-test","123");return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}

注意:1,在postHandle在添加header已经没有意义 2,切记preHandle返回值一定要是true

Spring春风拂面系列---SpringBoot 设置response header的方法总结相关推荐

  1. Spring春风拂面系列---SpringBoot之@EnableAutoConfiguration注解

    首先Spring Boot项目中都会如下启动类: @SpringBootApplication public class Application { public static void main(S ...

  2. 【spring源码系列-05】refresh中prepareRefresh方法的执行流程

    Spring源码系列整体栏目 内容 链接地址 [一]spring源码整体概述 https://blog.csdn.net/zhenghuishengq/article/details/13094088 ...

  3. springboot设置拦截器的方法

    springboot设置拦截器的方式: 1.编写一个类,在类上面加上@Configuration注解,然后继承 WebMvcConfigurerAdapter. 重写父类的方法:addIntercep ...

  4. Spring全家桶系列–[SpringBoot入门到跑路]

    //本文作者:cuifuan Spring全家桶----[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么 ...

  5. 【Java进阶营】Spring全家桶系列–[SpringBoot入门到跑路]

    Spring全家桶----[SpringBoot入门到跑路] 对于之前的Spring框架的使用,各种配置文件XML.properties一旦出错之后错误难寻,这也是为什么SpringBoot被推上主流 ...

  6. Spring Boot教程系列(ImportNew )

    ImportNew Spring Boot教程系列 SpringBoot (一) :入门篇--http://mp.weixin.qq.com/s/hAJmvrYfS6OehMYVgqpqkw Spri ...

  7. Spring Boot教程系列 ImportNew

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Impo ...

  8. ImportNew Spring Boot教程系列

    ImportNew Spring Boot教程系列 SpringBoot (一) :入门篇--http://mp.weixin.qq.com/s/hAJmvrYfS6OehMYVgqpqkw Spri ...

  9. Spring技术栈系列教程-- SpringMVC 、SpringBoot 、SpringCloud

    转载来源:https://mp.weixin.qq.com/s/N507Cfb_mbkGvHtg_FIaVg Spring Boot 系列 什么是 Spring Boot? 告诉你,Spring Bo ...

最新文章

  1. 【Linux】在虚拟机上安装CentOS7
  2. linux内核使用scons构建,如何使用scons进行交叉构建
  3. sql查询时间大于某一时间_查询时间从24分钟到2秒钟:记一次神奇的SQL优化
  4. 比尔·盖茨:如果你想了解硅谷,就看《硅谷》吧
  5. java编程打印以下图形,分享java打印简单图形的实现代码
  6. UVA - 12569 Planning mobile robot on Tree (EASY Version) BFS
  7. javascript 表达式和运算符 (二)
  8. 优化搜索排序结果从而“ 提升CTR、CVR业务指标”
  9. 【算法】CRC 循环冗余校验
  10. Matplolib subplot 子图控制
  11. JAVA虚拟机类加载机制之类加载的时机双亲委派模型
  12. c语言实验数据类型体会,实验1-C语言开发环境使用和数据类型、运算符、表达式-实验总结与体会...
  13. redis的配置文件解释
  14. 理解 asyncio 来构建高性能 Python 网络程序 - Ricequant米筐量化
  15. 【PTA】7-9 句子首字母变大写(python)
  16. Win10用Windows照片查看程序(照片查看器)打开图片
  17. sincerit 王者荣耀(01背包)
  18. iOS-规避iOS审核4.3规则的重心
  19. 利用selenium与etree抓取必应图片
  20. 杜拉拉升职记-选段-如何来定位一家公司以及所谓的中产阶级生活

热门文章

  1. 微信PC端打开网站页面空白
  2. SAD等图像匹配公式
  3. 计算机基本存储单位及其关系
  4. 【游戏开发】多人游戏网络同步相关技术(延迟处理)
  5. 模块学习(四)——超声波测距
  6. MATLAB-直方图均衡化
  7. 如何判断域名的潜力和价值?
  8. 硬件知识:红外感应电路
  9. 奇兔recovery卡刷教程_vivo X6(双4G)刷Recovery教程
  10. java不同数据类型之间的运算法则