【发布时间】:2019-02-21 08:02:15
【问题描述】:
我正在尝试设计一个rest api,下面是我的控制器代码。
当我调用http://localhost:8080/ 时,响应很好,但如果我点击http://localhost:8080/api/ca,它就会触发javax.servlet.ServletException: No adapter for handler [...CaDetailController@48224381]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
@RestController("/api")
public class CaDetailController {
private static final Logger logger = LoggerFactory.getLogger(GetClassLoader.class.getClass());
@Autowired
CaService caService;
@RequestMapping(path = "/ca", method = RequestMethod.GET)
public @ResponseBody List<CaDetail> getCorporateActions() {
logger.info("CaDetailController.findAllCaDetails()");
return caService.findAllCaDetails();
}
@RequestMapping(path = "/ca/{caId}", method = RequestMethod.GET)
public @ResponseBody List<CaDetail> getCorporateActions(@PathParam("caId") long caId) {
logger.info("CaDetailController.getCorporateActions() : caId : " + caId);
return caService.findAllCaDetails();
}
}
更新了控制器。
@RestController
@RequestMapping("/api/ca")
public class CaDetailController {
private static final Logger logger = LoggerFactory.getLogger(GetClassLoader.class.getClass());
@Autowired
CaService caService;
@GetMapping(path = "/")
public @ResponseBody List<CaDetail> getCorporateActions() {
logger.info("CaDetailController.findAllCaDetails()");
return caService.findAllCaDetails();
}
@GetMapping(path = "/{caId}")
public @ResponseBody List<CaDetail> getCorporateActions(@PathParam("caId") Long caId) {
logger.info("CaDetailController.getCorporateActions() : caId : " + caId);
return caService.findAllCaDetails();
}
}
【问题讨论】:
-
注意
@RestController("/api")与@RestController @RequestMapping("/api")不同。 -
也可以将
@RequestMapping(path = "/ca", method = RequestMethod.GET)替换为@GetMapping("/ca") -
@noiaverbale 即使在替换为
@GetMapping并添加@RequestMapping后仍然存在同样的问题。 -
哦,是的,
@GetMapping("/")导致了问题,在删除参数'/' it worked ! Thanks !! i've got confused witht he parameter of@restController` 注释后,如果需要引用,它实际上是一个 bean 名称。