我一直在尝试设置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。
答案 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以获得更多信息。