我正在寻找一种自动装配HttpServletResponse
的方法。它不适用于开箱即用的弹簧,但我发现this description。这有点令人讨厌,因为那个春天显然有一种机制可以让对象请求作用域(即HttpServletRequest
),这似乎是一个用螺栓固定在顶部的。
有没有办法挂钩spring用于HttpServletRequest
的机制?而且,任何想法为什么春季团队决定只使HttpServletRequest
能够使用自动装备(并排除HttpServletResponse
)?
答案 0 :(得分:9)
也许有一些解决方法,但它并不那么明显,因为它不是它的意思。 Spring MVC意味着有单个@Controller
bean,它们提供@RequestMapping
个方法,将请求和响应作为参数。
如果您需要在其他地方(服务层)进行响应 - 请不要这样做。响应不应超出Web(控制器)层。
要注入响应,您需要:
- 将回复存储在ThreadLocal
中
- 创建一个返回当前响应的工厂bean
关于the example code you showed - 我不确定你是否不需要工厂bean来返回代理(实现HttpServletResponse
),而代理又返回当前响应。它变得相当复杂。
但最终 - 你不应该这样做。如果需要拦截多个控制器调用,请使用mvc-interceptor。如果您确实需要使用方面,则可以获得响应,如果它作为参数传递给截获的方法。
答案 1 :(得分:4)
您可以简单地在方法句柄中包含请求吗?
@RequestMapping(method=Method.GET, value="myUrl")
public String doGet(HttpServletResponse response){//spring will put the response in for you
...
}