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 请求时,我在方法实现的第一行停止了。
我解决了这个问题:
- 用包含 bean 的包列表更新了我的属性文件,它等同于应用程序中的 @ComponentScan (spring.component.scan.packages)
- 将 Content-type = application/json 添加到失眠的 Header 中。
我有一个可以启动的 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 请求时,我在方法实现的第一行停止了。
我解决了这个问题:
- 用包含 bean 的包列表更新了我的属性文件,它等同于应用程序中的 @ComponentScan (spring.component.scan.packages)
- 将 Content-type = application/json 添加到失眠的 Header 中。