在 Spring Framework 中,@RestController
和 @Controller
都用于定义控制器类,但它们在功能和用法上有一些区别。
@Controller
@Controller
是一个用于定义 Spring MVC 控制器的注解。它用于标记一个类作为处理 Web 请求的控制器组件。通常,@Controller
用于传统的 MVC 模式,其中控制器负责处理请求,返回视图名称(如 JSP 页面),由视图解析器渲染成 HTML。
示例:
在这个例子中,greeting
方法处理 GET 请求并返回一个视图名称 greeting
,视图解析器会根据这个名称找到对应的视图文件。
@RestController
@RestController
是一个复合注解,实际上它是 @Controller
和 @ResponseBody
的组合。它用于创建 RESTful Web 服务的控制器类,其中控制器方法的返回值直接作为 HTTP 响应体,而不是视图名称。这使得 @RestController
非常适合用于返回 JSON、XML 或其他格式的数据。
示例:
在这个例子中,greeting
方法返回一个 Greeting
对象,Spring 会自动将其序列化为 JSON(或其他指定的格式)并作为响应体返回。
总结
@Controller
:用于传统的 Web 应用程序中,返回视图名称由视图解析器渲染成 HTML 页面。@RestController
:用于创建 RESTful Web 服务,返回的对象会直接作为 HTTP 响应体,通常用于返回 JSON 或 XML 数据。
选择使用 @Controller
还是 @RestController
主要取决于的应用需求。如果需要生成 HTML 页面并渲染视图,使用 @Controller
。如果需要处理 RESTful API 并返回数据,使用 @RestController
。