@Autowired HttpServletResponse

2022-09-02 10:33:06

我正在寻找一种自动布线的方法。它不适用于开箱即用的弹簧,但我找到了这个描述。这有效,但有点烦人,因为弹簧显然有一种机制来使对象请求范围(即),这似乎是一个螺栓固定在上面的黑客。HttpServletResponseHttpServletRequest

有没有办法钩入弹簧使用的相同机制?而且,任何想法为什么弹簧团队决定只使自动线功能(并被排除在外)?HttpServletRequestHttpServletRequestHttpServletResponse


答案 1

也许有一些解决方法,但它不是那么明显,因为它不是它应该的方式。Spring MVC旨在提供将请求和响应作为参数的方法的单例bean。@Controller@RequestMapping

如果您在其他位置(服务层)需要响应 - 请不要这样做。响应不应超出 Web(控制器)层。

要注入响应,您需要: - 将响应存储在 - 中以生成返回当前响应的工厂BeanThreadLocal

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

但最终 - 你不应该这样做。如果需要截获多个控制器调用,请使用 mvc 侦听器。如果确实需要使用某个方面,则可以在将响应作为参数传递给截获的方法时获取响应。


答案 2

您能否简单地将请求包含在方法句柄中?

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

推荐