SpringBoot获取Request请求的三种方式小结
作者:一位练习两年半的程序员
Request对象包含了请求的各种信息,比如请求方法、请求URL、请求参数、请求内容等等,这些信息可以供服务器进行处理和响应。那么在SpringBoot中,怎么才能获取到Request对象?
本文将介绍三种方法,并提示例参考。
一、直接在Controller方法参数上注入HttpServletRequest
这是最常用的一种方法。在Controller的方法参数上直接注入HttpServletRequest对象,Spring会自动将请求对象赋值到该参数中。
原理讲解:当Spring接收到HTTP请求时,会寻找一个合适的方法来处理该请求。如果该方法参数上标注了@RequestMapping或@Get、@Post等注解,Spring就会将HttpServletRequest对象注入到该参数中。
示例代码:
@RestController public class MyController { @RequestMapping("/test") public String test(HttpServletRequest request) { String ip = request.getRemoteAddr(); String method = request.getMethod(); String uri = request.getRequestURI(); return "ip:" + ip + ", method:" + method + ", uri:" + uri; } }
二、通过RequestContextHolder获取
在非Controller方法中,可以使用RequestContextHolder来获取ServletRequestAttributes对象,再从该对象中获取HttpServletRequest和HttpServletResponse。
原理讲解:Spring会将所有的请求参数、头部信息等封装到ServletRequestAttributes对象中。通过调用RequestContextHolder的getRequestAttributes()方法可以获取到该对象,再通过ServletRequestAttributes对象可以获取到HttpServletRequest对象。
示例代码:
@Service public class MyService { public String test() { ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = sra.getRequest(); String ip = request.getRemoteAddr(); String method = request.getMethod(); String uri = request.getRequestURI(); return "ip:" + ip + ", method:" + method + ", uri:" + uri; } }
三、通过@Autowired注解注入HttpServletRequest对象
如果需要在非Controller方法中获取HttpServletRequest对象,可以使用@Autowired注解将该对象注入到对应的变量中。
原理讲解:在初始化一个Bean时,如果发现该Bean中有一个@Autowired注解标注的属性,Spring就会自动寻找一个合适的Bean来注入到该属性中。如果该属性是HttpServletRequest对象,Spring就会将当前的请求对象注入到该属性中。
示例代码:
@Component public class MyComponent { @Autowired private HttpServletRequest request; public String test() { String ip = request.getRemoteAddr(); String method = request.getMethod(); String uri = request.getRequestURI(); return "ip:" + ip + ", method:" + method + ", uri:" + uri; } }
以上是SpringBoot获取Request的三种方法,分别是直接在Controller方法参数上注入HttpServletRequest、通过RequestContextHolder获取、以及通过@Autowired注解注入HttpServletRequest对象。
到此这篇关于SpringBoot获取Request请求的三种方式小结的文章就介绍到这了,更多相关SpringBoot获取Request请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!