SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式

这篇具有很好参考价值的文章主要介绍了SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

2、通过@Autowired注入

适用于所有的bean

@Autowired
private HttpServletRequest request;

@Autowired
private HttpServletResponse response;

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

通过调试可以看到,注入的Reques是一个代理类,而这个被代理的目标由RequestObjectFactory.getObject() 获取
springboot 获取httpresponse,小知识点,spring boot,后端,java
我们再看一下RequestObjectFactory.getObject() 的方法,最终还是走到了RequestContextHolder.getRequestAttributes()方法

private static class RequestObjectFactory implements ObjectFactory<ServletRequest>, Serializable {
	@Override
	public ServletRequest getObject() {
		return currentRequestAttributes().getRequest();
	}
	
	@Override
	public 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中。文章来源地址https://www.toymoban.com/news/detail-827974.html

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

到了这里,关于SpringBoot获取HttpServletRequest、HttpServletResponse的三种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Httpservletrequest与Httpservletresponse

    目录 一、Httpservletrequest 1.1什么是Httpservletrequest 1.2Httpservletrequest中的方法 二、Httpservletresponse 1.1什么是Httpservletresponse 1.2Httpservletresponse的方法 HttpServletRequest(请求):该接口封装了HTTP请求的信息,包括请求头、请求参数、请求方法、请求URL等。它提供了方法来获取这些信息

    2024年02月09日
    浏览(39)
  • 【Servlet】HttpServletRequest、HttpServletResponse

    目录 🎁1 HttpServletRequest  💥1.1 通过 query string 来进行传递 🐷1.2 通过 body (form) 来进行传递 🛸1.3 通过 body(json) 来进行传递 🍘2. HttpServletResponse 👶2.1 为响应设置状态码 200 🍝2.2 header 实现自动刷新效果 🌏2.3 跳转到 搜狗页面 🚑3. 表白墙 🏳‍🌈3.2 小结 前端给后端传递

    2024年02月11日
    浏览(38)
  • HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig详解

    HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是 HttpServletRequest 接口的实例化对象,表示该对象主要应用在 HTTP 协议上,该对象是由 Tomcat 封装好传递过来。 Htt

    2024年01月21日
    浏览(43)
  • JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的详细内容

    Servlet 是 Sun 公司开发动态 Web 的一门技术,在这些 API 中提供了一个接口就是:Servlet,开发一个 Servlet 程序需要 两个步骤 : 编写一个类,实现 Servlet 接口; 把开发好的 java 类部署到 Web 服务器中。 把实现了 Servlet 接口的 Java 程序叫做 Servlet 。 创建一个普通的 Maven 项目,注

    2024年02月03日
    浏览(45)
  • SpringBoot异步任务获取HttpServletRequest

    在使用框架日常开发中需要在controller中进行一些异步操作减少请求时间,但是发现在使用@Anysc注解后会出现Request对象无法获取的情况,本文就此情况给出完整的解决方案 @Anysc注解会开启一个新的线程,主线程的Request和子线程是不共享的,所以获取为null 在使用springboot的自定

    2024年02月21日
    浏览(52)
  • 【仿写tomcat】四、解析http请求信息,响应给前端,HttpServletRequest、HttpServletResponse的简单实现

    在解析请求之前我们要思考一个问题,我们解析的是其中的哪些内容? 对于最基本的实现,当然是 请求类型 , 请求的url 以及 请求参数 ,我们可以根据请求的类型作出对应的处理,通过url在我们的mapstore中找到servlet, 那么请求的参数我们是不是还没有储存的地方呢? 所以

    2024年02月12日
    浏览(36)
  • Springboot3.2.0使用RequestContextHolder获取HttpServletRequest为NULL

    在之前的版本中一般为了能在任意地方都能获取到HttpServletRequest我们一般都会自己封装工具类从 RequestContextHolder 中获取到 但是在新版的SpringBoot3.2.0版本中这种方式获取到的 ServletRequestAttributes 是null,点击进去RequestContextHolder查看源代码发现少了依赖 即使我在pom中加入的响应

    2024年04月13日
    浏览(39)
  • R语言实操记录——获取包的三种渠道及安装包的三种方式

    R语言实操记录——获取包的三种渠道及安装包的三种方式 渠道1 、CRAN:R语言的官网,里面包含有绝大多部分领域的大部分包。 渠道2 、Bioconductor:生物专业的相关网页,包含有大部分的专业数据分析包。 渠道3 、Github:一部分还未被官网收录的包或者比较新的包会被发布在

    2024年02月07日
    浏览(47)
  • 获取Git权限的三种方式

    本文以为Azure Devlop的平台为例子操作三种获取Git权限的办法 Github、Gitlab、Gitee、Gitcode等平台操作类似 主要是便于理解获取Git权限的几种采用方式 Git工具安装时,如果没有特别勾选不安装SSH,默认是Git安装好之后是会携带了SSH工具 本文以git clone指令拉取代码为例子,当没有权

    2024年01月16日
    浏览(64)
  • Python:获取ip地址的三种方法

    目录 方法一 方法二 方法三 运行结果: 运行结果: 运行结果:

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包