【问题标题】:Spring MVC @AutoWired response not workingSpring MVC @AutoWired 响应不起作用
【发布时间】:2012-03-31 23:01:28
【问题描述】:

我有:

@Controller
@RequestMapping(value="admin/*", method=RequestMethod.GET)
public class AdminController {

    @Autowired
    private HttpServletRequest request;

    @Autowired
    private HttpServletResponse response;

    @RequestMapping
    public ResponseEntity<String> test0() {
        System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
        return null;
    }


}

和标签:

<mvc:annotation-driven />

在我的 config.xml 中

感觉应该够了,不过@Autowired有问题:

没有为依赖找到类型为 [javax.servlet.http.HttpServletResponse] 的匹配 bean:预计至少有 1 个符合条件的 bean ...

我已经看到一些解决方案提到设置 bean 等,但我确信必须有一些更好的方法。注释扫描应该解决这个问题。如果我必须在不同时间为几个不同的注释在 xml 中设置 bean,那就太糟糕了。我只希望注释在我使用它们时起作用!

我见过: Spring MVC - Response

谢谢!

【问题讨论】:

标签: java spring jakarta-ee spring-mvc spring-annotations


【解决方案1】:

它不像你想要的那样工作,作为字段,因为请求和响应在每次请求之后都会发生变化(缺乏更好的解释)。每次在字段中出现新请求/响应时,您都无法重新注入。这就是为什么您必须将它们添加到每次新注入它们的方法中。

【讨论】:

  • 你是说我需要一个带注释的 getResponse() 方法才能工作吗?你确定这会起作用吗?
  • 没有。不要添加其他方法。只需添加 HttpServletRequest 作为 test0() 的参数
  • 请求是可注入的...仅供参考
【解决方案2】:

自动装配不适用于响应,仅适用于请求。有一些解决方法,但它们有点老套和蹩脚。我遇到了同样的问题,这是我最初的问题,带有解决方法的链接:@Autowired HttpServletResponse

【讨论】:

  • 我可以让人们知道我最终解决这个问题的方法是在“*”上使用拦截器并在请求中设置响应......通过请求使其可用,即自动接线...
【解决方案3】:

作为一种解决方法尝试:

@RequestMapping
public ResponseEntity<String> test0(
        HttpServletRequest request, 
        HttpServletResponse response) {
    System.out.println("ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ");
    return null;
}

也可以尝试添加RequestContextListener,但这在 Spring MVC 环境中不应该是必需的。

【讨论】:

  • @momomo 它实际上向我显示了相同的错误,但仍然有效。您对此部分的解决方案是什么?每个请求真的需要更新吗?如果是这样,为什么请求不需要相同的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-19
  • 2014-02-12
相关资源
最近更新 更多