Request對(duì)象包含了請(qǐng)求的各種信息,比如請(qǐng)求方法、請(qǐng)求URL、請(qǐng)求參數(shù)、請(qǐng)求內(nèi)容等等,這些信息可以供服務(wù)器進(jìn)行處理和響應(yīng)。那么在SpringBoot中,怎么才能獲取到Request對(duì)象?
本文將介紹三種方法,并提示例參考。
一、直接在Controller方法參數(shù)上注入HttpServletRequest
這是最常用的一種方法。在Controller的方法參數(shù)上直接注入HttpServletRequest對(duì)象,Spring會(huì)自動(dòng)將請(qǐng)求對(duì)象賦值到該參數(shù)中。
原理講解:當(dāng)Spring接收到HTTP請(qǐng)求時(shí),會(huì)尋找一個(gè)合適的方法來(lái)處理該請(qǐng)求。如果該方法參數(shù)上標(biāo)注了@RequestMapping或@Get、@Post等注解,Spring就會(huì)將HttpServletRequest對(duì)象注入到該參數(shù)中。
示例代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-757687.html
@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;
}
}
二、通過(guò)RequestContextHolder獲取
在非Controller方法中,可以使用RequestContextHolder來(lái)獲取ServletRequestAttributes對(duì)象,再?gòu)脑搶?duì)象中獲取HttpServletRequest和HttpServletResponse。
原理講解:Spring會(huì)將所有的請(qǐng)求參數(shù)、頭部信息等封裝到ServletRequestAttributes對(duì)象中。通過(guò)調(diào)用RequestContextHolder的getRequestAttributes()方法可以獲取到該對(duì)象,再通過(guò)ServletRequestAttributes對(duì)象可以獲取到HttpServletRequest對(duì)象。
示例代碼:
@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;
}
}
三、通過(guò)@Autowired注解注入HttpServletRequest對(duì)象
如果需要在非Controller方法中獲取HttpServletRequest對(duì)象,可以使用@Autowired注解將該對(duì)象注入到對(duì)應(yīng)的變量中。
原理講解:在初始化一個(gè)Bean時(shí),如果發(fā)現(xiàn)該Bean中有一個(gè)@Autowired注解標(biāo)注的屬性,Spring就會(huì)自動(dòng)尋找一個(gè)合適的Bean來(lái)注入到該屬性中。如果該屬性是HttpServletRequest對(duì)象,Spring就會(huì)將當(dāng)前的請(qǐng)求對(duì)象注入到該屬性中。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-757687.html
示例代碼:
@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方法參數(shù)上注入HttpServletRequest、通過(guò)RequestContextHolder獲取、以及通過(guò)@Autowired注解注入HttpServletRequest對(duì)象。
到了這里,關(guān)于SpringBoot獲取Request請(qǐng)求的三種方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!