@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 不起作用 - 未找到处理程序方法的主要内容,如果未能解决你的问题,请参考以下文章

启用 Hystrix 后 Autowire 不起作用

有标头时请求映射不起作用

@RefreshScope 和 @ConditionalOnProperty 不起作用

Feign的hystrix熔断器不起作用

HTTP Put 方法在 Spring Boot 中不起作用

CORS过滤在“授权”标头中不起作用[重复]