我有一个Spring MVC Web应用程序。现在我想使用Spring REST将我的服务公开为Web服务。为此,我想基于URL值处理Web和REST请求。下面我尝试了三个控制器,MasterController,PatientController和PatientRESTController,如下所示。为简洁起见,已跳过方法。
@Controller("/")
public class MasterController {
@RequestMapping("/web")
public ModelAndView webApplication(){
return new ModelAndView("redirect:/web/patient");
}
@RequestMapping("/rest")
public ModelAndView webService(){
return new ModelAndView("redirect:/rest/patient");
}
}
@Controller("/web/patient")
public class PatientController {
@GetMapping("")
public ModelAndView patientHome(){
ModelAndView mv = new ModelAndView();
mv.setViewName("patienthome");
return mv;
}
}
@RestController("/rest/patient")
public class PatientRESTController {
@GetMapping("")
public List getAllPatientsREST(){
return patientService.findAll();
}
}
在启动我的Web应用程序时,我收到错误:
模糊映射。无法映射' / rest / patient'方法 public java.util.List PatientRESTController.getAllPatientsREST() to {[],methods = [GET]}:已经有' / web / patient' bean方法
如何为REST和Web应用程序创建不同的url映射?
答案 0 :(得分:0)
我认为问题来自@GetMapping("")
中的空字符串
根据抛出的异常,它不是相对映射,因为在这两种情况下,Spring的已解析映射对于其余控制器都是空的:
模糊映射。无法映射' / rest / patient'方法公开 java.util.List PatientRESTController.getAllPatientsREST()to {[],methods = [GET]}:已经有' / web / patient' bean方法
您应该在getMapping注释中指定一个值。你可以试试这个或那个:
@RestController
public class PatientRESTController {
@GetMapping("/rest/patients")
public List getAllPatientsREST(){
return patientService.findAll();
}
}
就个人而言,我会声明我的RestController
:
@RestController
@RequestMapping("/rest/patients")
public class PatientRESTController {
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> getAll(HttpServletRequest request, HttpServletResponse response) {
...
}
}