小工具知识网

当前位置: 首页 > 行业知识 > SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式

行业知识

SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式

2026-11-05 19:57:09 来源:互联网转载

目录

  • 1、直接在Controller层方法参数上获取
  • 2、通过@Autowired注入
  • 3、通过RequestContextHolder获取

    1、直接在Controller层方法参数上获取

    仅仅适用在controller方法上。当Spring接收到HTTP请求时,会寻找一个合适的方法来处理该请求。如果该方法参数上标注了@RequestMapping或@Get、@Post等注解,Spring就会将HttpServletRequest对象注入到该参数中。

    @RestControllerpublic class Controller {    @RequestMapping("/test")    public String test(HttpServletRequest request,HttpServletResponse response) {        return "success";    }}

    2、通过@Autowired注入

    适用于所有的bean

    @Autowiredprivate HttpServletRequest request;@Autowiredprivate HttpServletResponse response;@RequestMapping("/test")public String test() {    Enumeration headerNames = request.getHeaderNames();    response.setHeader("header","header_value");    return "success";}

    通过调试可以看到,注入的Reques是一个代理类,而这个被代理的目标由RequestObjectFactory.getObject() 获取

    我们再看一下RequestObjectFactory.getObject() 的方法,最终还是走到了RequestContextHolder.getRequestAttributes()方法

    private static class RequestObjectFactory implements ObjectFactory, Serializable {@Overridepublic ServletRequest getObject() {return currentRequestAttributes().getRequest();}@Overridepublic String toString() {return "Current HttpServletRequest";}}private static ServletRequestAttributes currentRequestAttributes() {RequestAttributes requestAttr = RequestContextHolder.currentRequestAttributes();if (!(requestAttr instanceof ServletRequestAttributes)) {throw new IllegalStateException("Current request is not a servlet request");}return (ServletRequestAttributes) requestAttr;}

    3、通过RequestContextHolder获取

    适用于所有的方法,spring会通过RequestContextHolder.setRequestAttributes方法将RequestAttributes设置到ThreadLocal中。

    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attr.getRequest();HttpServletResponse response = attr.getResponse();

上一篇:基于JAVA+Springboot+Thymeleaf前后端分离项目:学校校园自习室教室座位预约系统设计与实现

下一篇:微擎推广海报制作秘籍,轻松设置教程,打造吸引人的宣传标题!