@Autowired HttpServletResponse

我正在寻找一种自动assemblyHttpServletResponse 。 它不适用于开箱即用的弹簧,但我发现了这种描述 。 这工作但有点烦人,在那个spring显然有一个机制来使对象请求范围(即HttpServletRequest ),这似乎是一个黑客螺栓顶部。

有没有办法挂钩spring用于HttpServletRequest的相同机制? 并且,任何想法为什么Spring团队决定只使HttpServletRequest能够支持autowire(并排除HttpServletResponse )?

也许有一些解决方法,但它并不那么明显,因为它不是它的意思。 Spring MVC意味着有单独的@Controller bean,提供@RequestMapping方法,将请求和响应作为参数。

如果您需要在其他地方(服务层)进行响应 – 请不要这样做。 响应不应超出Web(控制器)层。

要注入响应,您需要: – 将响应存储在ThreadLocal – 以创建返回当前响应的工厂bean

关于您展示的示例代码 -我不确定您是否不需要工厂bean来返回代理(实现HttpServletResponse ),而代理又返回当前响应。 它变得相当复杂。

但最终 – 你不应该这样做。 如果需要拦截多个控制器调用,请使用mvc-interceptor。 如果您确实需要使用方面,则可以获得响应,如果它作为参数传递给截获的方法。

你能简单地在方法句柄中包含请求吗?

 @RequestMapping(method=Method.GET, value="myUrl") public String doGet(HttpServletResponse response){//spring will put the response in for you ... }