@RequestMapping 不起作用 - 未找到处理程序方法
Posted
技术标签:
【中文标题】@RequestMapping 不起作用 - 未找到处理程序方法【英文标题】:@RequestMapping Doesn't work- Did not find handler method 【发布时间】:2019-01-28 17:20:42 【问题描述】:我在让 @RequestMapping 工作时遇到问题,我得到以下日志;你能帮我理解一下日志吗?
启动时记录:
调试 o.s.web.servlet.DispatcherServlet - 名称为“dispatcherServlet”的 DispatcherServlet 处理 [/ruler/webjars/test] 的 GET 请求
调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 查找路径 /webjars/test 的处理程序方法
调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 未找到 [/webjars/test] 的处理程序方法
调试 o.s.w.s.h.SimpleUrlHandlerMapping - 请求的匹配模式 [/webjars/test] 是 [/webjars/, /]
调试 o.s.w.s.h.SimpleUrlHandlerMapping - 请求 [/webjars/test] 的 URI 模板变量是
调试 oswshSimpleUrlHandlerMapping - 使用处理程序 [ResourceHttpRequestHandler [locations=[class path resource [META-INF/resources/webjars/]],resolvers=[org.springframework.web.servlet] 将 [/webjars/test] 映射到 HandlerExecutionChain。 resource.PathResourceResolver@52454457]]] 和1个拦截器
调试 o.s.web.servlet.DispatcherServlet - [/ruler/webjars/test] 的 Last-Modified 值为:-1
调试 o.s.web.servlet.DispatcherServlet - Null ModelAndView 返回到名为“dispatcherServlet”的 DispatcherServlet:假设 HandlerAdapter 已完成请求处理
调试 o.s.web.servlet.DispatcherServlet - 成功完成请求
访问localhost:80/ruler/test时记录:
调试 o.s.web.servlet.DispatcherServlet - 带名称的 DispatcherServlet 'dispatcherServlet' 处理 [/ruler/test] 的 GET 请求
调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 查找处理程序 路径 /test 的方法
调试 o.s.w.s.m.m.a.RequestMappingHandlerMapping - 未找到 [/test]的处理方法
调试 o.s.w.s.h.SimpleUrlHandlerMapping - 匹配模式 请求 [/test] 是 [/**]
调试 o.s.w.s.h.SimpleUrlHandlerMapping - URI 模板变量 请求 [/test] 是
调试 o.s.w.s.h.SimpleUrlHandlerMapping - 映射 [/test] 到 带有处理程序的 HandlerExecutionChain [ResourceHttpRequestHandler [locations=[类路径资源[META-INF/resources/],类路径 资源 [resources/],类路径资源 [静态/],类路径 资源 [public/],ServletContext 资源 [/]], 解析器=[org.springframework.web.servlet.resource.PathResourceResolver@4538856f]]] 和 1 个拦截器
DEBUG o.s.web.servlet.DispatcherServlet - Last-Modified 值 [/ruler/test] 是:-1
调试 o.s.web.servlet.DispatcherServlet - 返回 Null ModelAndView 到名为“dispatcherServlet”的 DispatcherServlet:假设 HandlerAdapter 完成请求处理
调试 o.s.web.servlet.DispatcherServlet - 成功完成 请求
Application.properties:
server.servlet.context-path=/ruler
server.port=80
休息控制器:
@RestController
public class myController
private final MedicalService medicalService;
@Autowired
public myController(MedicalService medicalService)
this.medicalService = medicalService;
@RequestMapping(value="/test")
public String testRest()
return "Yay";
没有 web.xml。
【问题讨论】:
1.显示您完整的控制器类或至少类声明和注释 2. 您如何调用此端点以及您使用的 url 是什么? 尝试将@ResponseBody
注释添加到您的testRest
方法中
@S.Tushinov 根据文件,这是没有好处的;使用@RestController
等效于使用@Controller
和@ResponseBody
您不应该访问 url 和端口号吗?类似localhost:8080/ruler/test
【参考方案1】:
您还可以将@GetMapping 与 ResponseEntity 一起使用以获取更多具体信息
@GetMapping(value = "/test")
public ResponseEntity<String> testRest()
return ResponseEntity.ok("Yay");
【讨论】:
我在问题本身中添加了日志;它只是说它没有找到任何映射!【参考方案2】:找到了我的问题here 的答案,这是因为项目结构,而不是配置。
应用程序包应该是com.app
,然后控制器应该是com.app.controller
。
【讨论】:
【参考方案3】:改变
@RequestMapping(value="/test")
到
@RequestMapping(value="/test", method = RequestMethod.GET)
【讨论】:
我认为这可以解决问题,因为他的请求是 GET 请求并且处理程序找不到它的映射,但是正如 Ace 在他自己的回答中讨论的那样,问题来自不同的原因。 请说明为什么这可以解决问题。 meta.stackexchange.com/questions/114762/…以上是关于@RequestMapping 不起作用 - 未找到处理程序方法的主要内容,如果未能解决你的问题,请参考以下文章
@RefreshScope 和 @ConditionalOnProperty 不起作用