1.获取Request的三种方式
一、直接注入的方式(推荐)
作为一名轻微强迫症的开发人员,只推荐这种方式,因为这种直接注入的可以在controller、service等任何你想要注入的地方注入,容易理解,这种方式后面将会继续讨论是否是线程安全。
@RestController
@RequestMapping("/request")
@RequiredArgsConstructor //通过构造器注入
public class RequestController {
private final HttpServletRequest request1;
@GetMapping("/test1")
public void test1() {
//注入后就可以直接使用
request1.setAttribute("userName","leakey");
}
}
二、在controller里面使用参数注入(不推荐)
这种方式request是作为controller的参数注入进来的,优点就是直观,让人感觉到每个请求都是独立的request(硬夸),缺点是后面的service或者其他地方需要用request对象的时候,需要带着他到处跑,那么优秀的你,想必也不能忍受吧!
@RestController
@RequestMapping("/request")
public class RequestController {
@GetMapping("/test2")
public void test2(HttpServletRequest request2){
request2.setAttribute("userName","leakey");
}
}
三、通过RequestContextHolder获取
这种方式也可以在任何地方获取Request,优点当然是方便,缺点稍微不那么直观
@RestController
@RequestMapping("/request")
public class RequestController {
@GetMapping("/test3")
public void test3(){
ServletRequestAttributes servletRequest