[英]Spring Boot Controller not registered, gets 404 - package structure OK
我對此感到非常沮喪... Spring Boot沒有注冊控制器(至少我在日志中沒有看到它)。
控制器類位於主應用程序類的UNDER包中...這是人們遇到的最常見的問題。
就我而言,我正在使用Maven和以下依賴項(僅為您提供關鍵的依賴項):
spring-boot-starter-data-jpa
spring-boot-starter-web
spring-boot-starter-validation
spring-boot-configuration-processor
我還在Hibernate中使用一些依賴項。 在日志中,我只能看到與Hibernate相關的內容-您可以在此處看到它。 當我點擊一個控制器的URL時,我在Postman中得到了這個:
{
"timestamp": 1515870369837,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/hello"
}
然后,出現其他日志:
sty 13, 2018 8:06:01 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'dispatcherServlet'
但是沒有其他事情真正發生……我完全不明白,這是我第一次遇到像控制器這樣的瑣碎問題……而在StackOverflow上確實找不到解決方案。
這是我正在使用的控制器的代碼:
@RestController("/parkingPlaces")
public class ParkingPlacesController {
@Resource
ParkingPlaceService ppService;
@RequestMapping("/find")
List<ParkingPlaceDTO> findParkingPlaces(@RequestBody GpsDTO position) {
return ppService.findParkingPlaces(position.getLat(), position.getLon());
}
@RequestMapping("/find/ray")
List<ParkingPlaceDTO> findParkingPlacesWithinRadius(@RequestBody GpsDTO position) {
return ppService.findParkingPlaces(position.getLat(), position.getLon(), position.getRay());
}
}
另一個更簡單:
@Controller
public class TestController {
@RequestMapping("/hello")
public String hello() {
return "Hello!";
}
}
請幫助大家:(
更新#1我注意到日志記錄依賴關系有些混亂...僅記錄了與Hibernate相關的內容,這使我認為還可以,但是我已經進行了一些清理,並且日志現在很明顯。 我可以看到控制器路徑正在注冊中...
2018-01-14 20:34:57.602 INFO 8572 --- [ restartedMain] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2018-01-14 20:34:59.253 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@3290cd1d: startup date [Sun Jan 14 20:34:46 CET 2018]; root of context hierarchy
2018-01-14 20:34:59.506 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/find]}" onto java.util.List<pl.ppclone.dto.ParkingPlaceDTO> pl.ppclone.controller.ParkingPlacesController.findParkingPlaces(pl.ppclone.dto.GpsDTO)
2018-01-14 20:34:59.508 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/find/ray]}" onto java.util.List<pl.ppclone.dto.ParkingPlaceDTO> pl.ppclone.controller.ParkingPlacesController.findParkingPlacesWithinRadius(pl.ppclone.dto.GpsDTO)
2018-01-14 20:34:59.513 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello],methods=[GET]}" onto public java.lang.String pl.ppclone.controller.TestController.hello()
2018-01-14 20:34:59.524 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-01-14 20:34:59.527 INFO 8572 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2018-01-14 20:34:59.607 INFO 8572 --- [ restartedMain] o.s.w.s.h.BeanNameUrlHandlerMapping : Mapped URL path [/parkingPlaces] onto handler '/parkingPlaces'
2018-01-14 20:34:59.654 INFO 8572 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-01-14 20:34:59.654 INFO 8572 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-01-14 20:34:59.826 INFO 8572 --- [ restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2018-01-14 20:35:00.528 INFO 8572 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2018-01-14 20:35:00.730 INFO 8572 --- [ restartedMain] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-01-14 20:35:00.868 INFO 8572 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
您尚未指定應該使用的http方法
@RequestMapping(value = "/hello", method = RequestMethod.GET)
要么
@GetMapping("/hello")
我設法找到了解決方案。 在調試器的幫助下,我注意到/ hello確實被稱為...因為它只是一個測試控制器,所以我開始研究真正的問題,即RestController。 然后我注意到這個@RestController("mainPath")
實際上並沒有按我的預期工作(它在每個方法路徑之前都提供了額外的路徑)。 所以解決方案是寫
@RestController
@RequestMapping("mainPath")
所以它按預期工作:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.