gpt4 book ai didi

java - 为什么找不到处理程序方法?

转载 作者:行者123 更新时间:2023-12-01 11:16:27 25 4
gpt4 key购买 nike

我想使用 org.springframework.web.bind.annotation.RestController 除了 GWT WebApplication 之外公开一个简单的 REST API。因此,我在 web.xml 中添加了另一个 servlet,并将其映射到 /app/restapi/*:

<!-- ... -->
<servlet>
<servlet-name>xsrf</servlet-name>
<servlet-class>com.google.gwt.user.server.rpc.XsrfTokenServiceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xsrf</servlet-name>
<url-pattern>/app/xsrf</url-pattern>
</servlet-mapping>

<!-- New servlet for my REST API -->
<servlet>
<servlet-name>mobile-dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mobile-dispatcher</servlet-name>
<url-pattern>/app/restapi/*</url-pattern>
</servlet-mapping>

这是应该处理请求的 Controller :

@RestController
@RequestMapping("/app/restapi")
public class RestaurantController {

class ReturnValue {
public String str = "1337";
}

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/test", method = RequestMethod.GET, produces = { "application/json" })
public ReturnValue getTest() {
return new ReturnValue();
}
}

问题是请求 http://localhost:8080/app/restapi/test 给我的只是:

16:14:22.497 [http-bio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'mobile-dispatcher' processing GET request for [/app/restapi/test]
16:14:22.497 [http-bio-8080-exec-8] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /test
16:14:22.497 [http-bio-8080-exec-8] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Did not find handler method for [/test]
16:14:22.497 [http-bio-8080-exec-8] WARN o.s.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/app/restapi/test] in DispatcherServlet with name 'mobile-dispatcher'
16:14:22.497 [http-bio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - Successfully completed request

我不知道为什么。那么:我在这里做错了什么以及如何才能使这项工作按预期进行?

最佳答案

您像这样配置了 servlet 映射

<servlet-mapping>
<servlet-name>mobile-dispatcher</servlet-name>
<url-pattern>/app/restapi/*</url-pattern>
</servlet-mapping>

这是您的应用程序的根 URL。当您使用 RequestMapping("/app/restapi") 配置 RestController 时,这意味着 Controller 将监听 http://domain/app/restapi/app/restapi 。只需删除 ("/app/restapi")从你的 Controller 定义来看,你应该没问题。

启动时,Spring MVC 框架应该打印它监听到控制台的 URL 映射,您应该在那里看到 Controller 的映射。

关于java - 为什么找不到处理程序方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31773649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com