@Controller 和 @RestController 是 Spring MVC 中用于处理 HTTP 请求的注解,它们有以下区别:
-  返回值处理方式: -  @Controller用于定义一个传统的 Spring MVC 控制器,它的方法通常返回视图名称或ModelAndView对象,由视图解析器解析并渲染成 HTML 页面。@Controller public class MyController {@GetMapping("/hello")public String hello() {return "helloPage"; // 返回视图名称} }
-  @RestController组合了@Controller和@ResponseBody,用于定义 RESTful 风格的控制器。其方法的返回值会直接写入 HTTP 响应体,而不是通过视图解析器解析为视图。@RestController public class MyRestController {@GetMapping("/api/hello")public String hello() {return "Hello, REST API!"; // 直接写入响应体} }
 
-  
-  默认响应类型: - @Controller默认返回视图,通常使用- ViewResolver将逻辑视图名映射为实际视图。
- @RestController默认返回 JSON 或 XML 格式的数据,而不是视图。
 
-  使用场景: - 使用 @Controller时,通常用于构建传统的 Web 应用,其中页面渲染由视图模板(如 JSP、Thymeleaf)处理。
- 使用 @RestController时,适用于构建 RESTful API,其中数据以 JSON 或 XML 格式返回给客户端。
 
- 使用 
实际例子:
@Controller
public class WebPageController {@GetMapping("/helloPage")public String helloPage() {return "helloPage"; // 返回视图名称,通常由视图解析器解析为实际视图}
}
@RestController
public class ApiController {@GetMapping("/api/hello")public String helloApi() {return "Hello, REST API!"; // 直接返回字符串,将以 JSON 或 XML 格式写入响应体}
}
在构建 Web 页面的场景中,使用 @Controller 处理用户请求,返回视图名称,然后由视图解析器解析为实际视图。而在构建 RESTful API 的场景中,使用 @RestController 直接返回数据,通常以 JSON 或 XML 格式。