即使URL已映射,Spring MVC 404

时间:2018-07-01 05:59:59

标签: spring spring-mvc

我一直在尝试设置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

1 个答案:

答案 0 :(得分:1)

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

原因是,您在@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 {{1} },最后 DispatcherServlet 应该由您的控制器映射:

/v0/foo

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