@Autowired HttpServletResponse

时间:2011-08-08 14:57:28

标签: java spring spring-mvc autowired

我正在寻找一种自动装配HttpServletResponse的方法。它不适用于开箱即用的弹簧,但我发现this description。这有点令人讨厌,因为那个春天显然有一种机制可以让对象请求作用域(即HttpServletRequest),这似乎是一个用螺栓固定在顶部的。

有没有办法挂钩spring用于HttpServletRequest的机制?而且,任何想法为什么春季团队决定只使HttpServletRequest能够使用自动装备(并排除HttpServletResponse)?

2 个答案:

答案 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
  ... 
}