@Controller 和 @RestController 注解是 Spring 框架中用于标识控制器类的注解,它们的主要区别在于对返回结果的处理方式。
- @Controller 注解:
- @Controller 注解通常用于传统的 Spring MVC 应用程序中。它表示一个控制器类,处理来自客户端的请求,并返回视图页面或模型数据。
- 当一个方法使用 @Controller 注解时,返回的字符串通常被解释为视图名称,Spring 会根据视图解析器配置来解析并呈现相应的视图页面。
示例:
@Controller
public class MyController {
@RequestMapping("/hello")
public String hello() {
return "hello"; // 返回的字符串被解释为视图名称
}
}
- @RestController 注解:
- @RestController 注解通常用于创建 RESTful 服务,它结合了 @Controller 和 @ResponseBody 注解的功能。它表示一个控制器类,处理来自客户端的请求,并返回数据对象。返回的数据会直接以 JSON 或 XML 格式写入 HTTP 响应体中,而不是解释为视图名称。
示例:
@RestController
public class MyRestController {
@RequestMapping("/api/hello")
public String hello() {
return "Hello, World!"; // 返回的字符串直接作为响应体返回
}
}
总之,@Controller 注解用于创建传统的 MVC 控制器,而 @RestController 注解用于创建 RESTful 服务,直接返回数据而不是视图页面。