-
功能范畴:
@Controller:用于定义一个控制器类,主要用于处理用户请求并返回视图(通常是HTML页面)。常常与 Spring MVC 的视图解析器一起使用。@RestController:是一个特殊类型的控制器,用于返回数据而不是视图。它用于构建 RESTful Web 服务,返回 JSON、XML 或其他格式的数据。
-
返回值处理:
@Controller的方法默认返回的是视图名。如果想返回 JSON 数据,需要额外使用@ResponseBody注解。@RestController是一个组合注解,实际上是@Controller和@ResponseBody的结合。使用@RestController标注的类中的每个方法返回的数据会被自动序列化为 JSON(或其他格式),而不是视图名称。
使用 @Controller
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class MyController {@GetMapping("/hello")public String hello() {return "hello"; // 返回视图名}
}
使用 @RestController
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyRestController {@GetMapping("/hello")public String hello() {return "Hello, World!"; // 直接返回数据}
}
为什么引入 @RestController
-
简化代码:
@RestController减少了在使用@Controller时必须显式添加@ResponseBody注解的需求,使代码更简洁清晰。 -
清晰的意图:使用
@RestController明确表示该类的目的是为了提供 RESTful API,使得代码的可读性更强。 -
语义的明确:在 RESTful 开发中,使用
@RestController提供一种语义上的约定,帮助其他开发者快速理解这个控制器的角色和所期望的返回格式。
何时使用
- 当你需要返回视图(HTML 页面)时,使用
@Controller。 - 当你构建 RESTful Web 服务,并且需要返回 JSON 或 XML 数据时,应使用
@RestController。