【问题标题】:Spring MVC 404 even though URL is mapped即使 URL 已映射,Spring MVC 404
【发布时间】:2018-07-07 23:48:20
【问题描述】:

我一直在尝试设置 Spring MVC 控制器,但是当我尝试发出 GET 请求时,出现 404 错误。

我在这里创建了一个工作测试示例:https://github.com/Jardo-51/zk-spring-mvc-test

当我在 Tomcat 上运行应用程序并尝试向 http://localhost:8080/zk-spring-mvc-test/api/v0/foo 发出 GET 请求时,我收到 404 错误并且日志显示:

WARNING: No mapping found for HTTP request with URI [/zk-spring-mvc-test/api/v0/foo] in DispatcherServlet with name 'dispatcher-api'`

我一直在尝试根据this answer修复它,发现控制器映射正确,因为启动时的日志说:

INFO: Mapped "{[/zk-spring-mvc-test/api/v0/foo],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.lang.String> com.jardoapps.zkspringmvctest.controllers.FooController.method()

该应用程序使用 ZK 框架,该框架需要自己的 servlet,因此可能与 DispatcherServlet 存在冲突。请参阅我的示例应用了解更多详细信息(它仅包含必要的代码)。

这里是web.xlm(Spring 上下文和 MVC 配置在顶部)。

这里是controller class

【问题讨论】:

    标签: spring spring-mvc


    【解决方案1】:

    只需在 FooController 类中将 @RequestMapping("zk-spring-mvc-test/api/v0/foo") 替换为 @RequestMapping("/v0/foo")

    原因是您在 @RequestMapping 注释中指定的路径是请求 URL 中超出调用 servlet 的部分。

    您将DispatcherServlet 的映射定义为:

    <servlet-mapping>
        <servlet-name>dispatcher-api</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    

    所以我们有 zk-spring-mvc-test 这是上下文根(这取决于部署),/api/ 调用 Spring DispatcherServlet,最后是 /v0/foo 应该由你的控制器映射:

    @RestController
    @RequestMapping("/v0/foo")
    public class FooController {
    
        @RequestMapping(method = RequestMethod.GET)
        public ResponseEntity<String> method() {
            return ResponseEntity.ok().body("OK");
        }
    }
    

    您可以查看Spring MVC configure url-pattern 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多