由于@RestController@Controller@ResponseBody的组成部分,因此我相信我是否希望我的 Controller 同时工作
仅用@RestController注释的MVC和REST Controller 应该没问题。那是对的吗?

因为@RestController@Controller@ResponseBody,的组合,所以我认为它在内部意味着对

  • 接收http请求(由于@Controller)
  • 以JSON格式发送响应(由于@ResponseBody),但是可以根据需要更改响应
  • 最佳答案

    @RestController并不用于返回要解析的 View 。它应该返回将被写入响应主体的数据,因此包含@ResponseBody。当@ResponseBody已经在类级别上注释时,您不能在单个处理程序方法上有选择地禁用@ResponseBody

    您可以通过返回ModelAndView来解决此问题,即使在@RestController中也可以使用,但是您实际上不应该这样做:

    @RequestMapping
    public ModelAndView renderFooList() {
        ModelAndView mav = new ModelAndView("foo/list");
        mav.addObject("foos", fooService.getFoos());
        return mav;
    }
    

    最好为返回 View 的普通处理程序创建单独的 Controller ,并为RESTful Material 创建REST Controller 。或者用简单的@Controller注释该类,然后将@ResponseBody放在您实际需要的方法上。

    10-08 05:51