Spring Boot Rest Api 调用 404 Not Found 错误

SpringBoot RestApi call 404 Not Found error

我有一个可以启动的 SpringBoot 应用程序 ( http://localhost:80 )。

在我的 application.yml 中:

application:
  baseurl: /respViewer/api

在我的应用程序中,我定义了一个@RestController 和一个端点:

@RestController
@RequestMapping("${application.baseurl}/viewer")

.....

@PostMapping(value = "/getRespList", consumes = MediaType.APPLICATION_JSON_VALUE,
                produces = MediaType.APPLICATION_JSON_VALUE)
        public ResponseEntity<Object> getResponsibilities(@RequestBody RequestDetail requestDetail)

当我尝试使用 Insomnia 或通过浏览器访问我的应用程序时,出现 404 错误。

http://localhost:8080/respViewer/api/viewer/getRespList

{
  "timestamp": "2022-04-25T19:52:32.426+00:00",
  "status": 404,
  "error": "Not Found",
  "message": "",
  "path": "/respViewer/api/viewer/getRespList"
}

我还检查了控制台输出并发现了这些消息:

 POST "/respViewer/api/viewer/getRespList", parameters={}
2022-04-25 15:52:32.253 DEBUG 3744 --- [nio-8080-exec-1] o.s.w.s.h.SimpleUrlHandlerMapping        : Mapped to ResourceHttpRequestHandler ["classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", "/"]
2022-04-25 15:52:32.382 DEBUG 3744 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
2022-04-25 15:52:32.387 DEBUG 3744 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Completed 404 NOT_FOUND

我做错了什么?

更新 1:

我将我有 REST 控制器的包位置添加到 application.yml :

spring:
      component:
        scan:
          packages: com.example.demoRespManager

现在我没有收到 404 错误,但是看起来我没有进入实现方法的主体。我在方法的第一行设置了一个断点,但从未停在那里。控制台中的输出是:

2022-04-25 21:25:43.749  INFO 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Initializing Servlet 'dispatcherServlet'
2022-04-25 21:25:43.750 DEBUG 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Detected StandardServletMultipartResolver
2022-04-25 21:25:43.915 DEBUG 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data
2022-04-25 21:25:43.915  INFO 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Completed initialization in 166 ms
2022-04-25 21:25:44.134 DEBUG 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : POST "/respViewer/api/viewer/getRespList", parameters={}
2022-04-25 21:25:44.180 DEBUG 27996 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Using @ExceptionHandler com.<my_package_path>.exception.ApplicationExceptionHandler#handleException(Exception, WebRequest)
2022-04-25 21:25:44.254 DEBUG 27996 --- [nio-8080-exec-1] o.s.w.s.m.m.a.HttpEntityMethodProcessor  : No match for [application/json], supported: []
2022-04-25 21:25:44.261 DEBUG 27996 --- [nio-8080-exec-1] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type '' not supported]
2022-04-25 21:25:44.262 DEBUG 27996 --- [nio-8080-exec-1] o.s.w.s.DispatcherServlet                : Completed 415 UNSUPPORTED_MEDIA_TYPE

更新 2:

在 INSOMNIA 应用程序的 Header 部分,我添加了 Content-type = application/json,因为我在我的端点中定义了它,然后它开始工作。我能够在 DEBUG 模式下启动应用程序,当我在 INSOMNIA 中发出 POST 请求时,我在方法实现的第一行停止了。

我解决了这个问题:

  1. 用包含 bean 的包列表更新了我的属性文件,它等同于应用程序中的 @ComponentScan (spring.component.scan.packages)
  2. 将 Content-type = application/json 添加到失眠的 Header 中。