跳到主要内容

简述@RestController 和 @Controller 有什么区别?

参考答案:

@Controller@RestController 都是 Spring MVC 框架中的注解,用于创建控制器类。它们之间的主要区别在于如何处理返回的数据。

  1. @Controller:这是 Spring MVC 提供的一个基础注解,用于定义一个控制器类。在类上使用 @Controller 注解后,Spring 会将其实例化为一个 bean,并且将其视为一个控制器。在控制器方法中,你可以返回任何类型的数据,比如 ModelAndView、String、void 等。返回的数据将由 Spring MVC 自动解析并渲染到视图中。
  2. @RestController:这是 Spring 4.0 版本新增的一个注解,是 @Controller@ResponseBody 的组合。使用 @RestController 注解的类中的所有方法都会默认添加 @ResponseBody 注解,这意味着方法的返回值将直接作为 HTTP 响应的 body 返回给客户端,而不是被解析并渲染到视图中。因此,@RestController 通常用于创建 RESTful Web 服务,返回 JSON、XML 等数据格式。

总结来说,@Controller@RestController 的主要区别在于如何处理返回的数据。@Controller 主要用于传统的 MVC 架构,返回的数据会被解析并渲染到视图中;而 @RestController 则主要用于 RESTful Web 服务,返回的数据会直接作为 HTTP 响应的 body 返回给客户端。