Java 从Spring MVC@RestController返回视图

Java 从Spring MVC@RestController返回视图,java,spring-mvc,Java,Spring Mvc,由于@RestController是由@Controller和@ResponseBody组成,我相信如果我想让我的控制器同时工作的话 MVC和REST控制器只要用@RestController注释就可以了。对吗 由于@RestController是@Controller和@ResponseBody的组合,我认为它在内部意味着它有利于 接收http请求(因为@Controller) 以JSON格式发送响应(因为@ResponseBody),但如果需要可以更改 @RestController注释,它

由于
@RestController
是由
@Controller
@ResponseBody
组成,我相信如果我想让我的控制器同时工作的话 MVC和REST控制器只要用
@RestController
注释就可以了。对吗

由于
@RestController
@Controller
@ResponseBody的组合,
我认为它在内部意味着它有利于

  • 接收http请求(因为
    @Controller
  • 以JSON格式发送响应(因为
    @ResponseBody
    ),但如果需要可以更改

  • @RestController注释,它将此类标记为控制器,其中每个方法都返回一个域对象/pojo而不是视图。这意味着我们不再使用视图解析程序,我们不再直接发送html作为响应,而是发送转换为消费者理解的格式的域对象。

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

    您可以通过返回
    ModelAndView
    来解决此问题,即使在
    @RestController
    中也可以,但您确实不应该:


    最好为返回视图的普通处理程序创建单独的控制器,为RESTful内容创建REST控制器。或者用普通的
    @Controller
    注释类,并将
    @ResponseBody
    放在您实际需要的方法上。

    您能解释一下为什么RestController/ResponseBody只忽略ModelAndView吗?还有没有任何类列表不会被RestController/ResponseBody转换为json?
    @RequestMapping
    public ModelAndView renderFooList() {
        ModelAndView mav = new ModelAndView("foo/list");
        mav.addObject("foos", fooService.getFoos());
        return mav;
    }