我可以自动装配吗HttpServletRequest
in my RestController
就像下面一样,它会返回不同的结果吗servletRequest
即使是在高并发环境下执行。我有一个限制,我不能将其作为方法参数,因为我正在实现一个自动生成的接口,并且不会有HttpServletRequest
作为方法参数。
@RestController
public class MyController implements MyInterface {
@Autowired
private HttpServletRequest servletRequest;
@Override
@RequestMapping(value = "/test", produces = {"application/json"}, consumes = {"application/json"}, method = RequestMethod.POST)
public ResponseEntity<MyResponse> test(@RequestBody final MyRequest payload){
...
}
...
}
我已经浏览了这些问题和其他一些关于此的文章。但只是想确保当我们自动装配时HttpServletRequest
在控制器中然后它的Scope is Request?
Spring 3 MVC 从控制器访问 HttpRequest
如何分配线程来处理 Servlet 请求?
Spring-Controller 及其实例变量的范围
如何在 spring bean 中获取 HttpServletRequest?
如何在Java中获取HTTP请求头
Note:我确实尝试过这个,看起来效果很好。但只是想确认即使在高度并发的环境中它也是一个万无一失的解决方案。
另外,如果这是正确的方法,如果有人能解释它到底是如何工作的,我将不胜感激。
我已经用过这个并且效果很好。但不幸的是我没有找到任何官方文档提到这应该有效。
以下是基于我通过运行具有不同标头/有效负载等的多个请求来调试代码的理解的解释:
无论我们在字段上还是通过构造函数自动装配,servletRequest
其行为类似于代理对象,它将调用委托给当前 HttpServletRequest每个请求都不同。因此,即使它是通过单例中的构造函数注入的休息控制器,对于每个新请求,它仍然会将调用委托给相应的 HttpServletRequest。这利用了AutowireUtils.ObjectFactoryDelegatingInitationHandler访问当前的 HttpServletRequest 对象。它的java文档还说用于延迟访问的反射 InvokingHandler当前目标对象
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)