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的组合,
我认为它在内部意味着它有利于
@Controller
)@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;
}