簡體   English   中英

Spring Boot Controller未注冊,獲取404-包結構正常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM