为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

米脂 2019-10-25 11:02:37

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


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


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


查看完整描述

3 回答

?
动漫人物

可以将请求范围的bean与请求对象自动连接。


private @Autowired HttpServletRequest request;


查看完整回答
反对 回复 2019-10-25
?
元芳怎么了

Spring 通过type 的包装器对象公开当前HttpServletRequest对象(以及当前HttpSession对象)。此包装器对象绑定到ThreadLocal,可以通过调用方法获得。ServletRequestAttributesstaticRequestContextHolder.currentRequestAttributes()


ServletRequestAttributes提供getRequest()获取当前请求,getSession()获取当前会话的方法以及获取存储在两个范围中的属性的其他方法。以下代码虽然有点难看,但应该可以在应用程序中的任何位置为您提供当前的请求对象:


HttpServletRequest curRequest = 

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())

.getRequest();

请注意,该RequestContextHolder.currentRequestAttributes()方法返回一个接口,并且需要将其类型转换为ServletRequestAttributes实现该接口的类型。


春季Javadoc: RequestContextHolder | ServletRequestAttributes


查看完整回答
反对 回复 2019-10-25
?
慕圣8478803

如此处建议的那样,您还可以将HttpServletRequestas作为方法参数注入,例如:


public MyResponseObject myApiMethod(HttpServletRequest request, ...) {

    ...

}


查看完整回答
反对 回复 2019-10-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信