在Spring MVC中分离Web和REST请求的请求映射

时间:2016-10-31 11:02:37

标签: java spring rest spring-mvc request-mapping

我有一个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映射?

1 个答案:

答案 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) {
     ...
    }
  }