Spring:如何将HttpServletRequest注入到请求范围的bean中?

我正在尝试在Spring中建立一个请求范围的bean。


我已经成功设置好了,所以每个请求创建一次bean。现在,它需要访问HttpServletRequest对象。


由于该bean是每个请求创建一次的,因此我认为容器可以轻松地将请求对象注入到我的bean中。我怎样才能做到这一点 ?


米脂
浏览 1313回答 3
3回答

动漫人物

可以将请求范围的bean与请求对象自动连接。private @Autowired HttpServletRequest request;

元芳怎么了

Spring 通过type 的包装器对象公开当前HttpServletRequest对象(以及当前HttpSession对象)。此包装器对象绑定到ThreadLocal,可以通过调用方法获得。ServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()ServletRequestAttributes提供getRequest()获取当前请求,getSession()获取当前会话的方法以及获取存储在两个范围中的属性的其他方法。以下代码虽然有点难看,但应该可以在应用程序中的任何位置为您提供当前的请求对象:HttpServletRequest curRequest = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();请注意,该RequestContextHolder.currentRequestAttributes()方法返回一个接口,并且需要将其类型转换为ServletRequestAttributes实现该接口的类型。春季Javadoc: RequestContextHolder | ServletRequestAttributes

GCT1015

如此处建议的那样,您还可以将HttpServletRequestas作为方法参数注入,例如:public MyResponseObject myApiMethod(HttpServletRequest request, ...) {    ...}
打开App,查看更多内容
随时随地看视频慕课网APP