Spring Boot,注解,@RestController
@RestController
是 Spring MVC 中用于创建 RESTful Web 服务的核心注解。
@RestController 核心知识点 REST
- 作用:
@RestController
是一个方便的组合注解,它结合了@Controller
和@ResponseBody
两个注解。@Controller
: 将类标记为一个控制器,使其能够处理传入的 Web 请求。@ResponseBody
: 应用于类级别时,表示该控制器中所有请求处理方法的返回值都将直接写入 HTTP 响应体中,而不是视图解析。
- 目的: 简化 RESTful API 的开发。使用
@RestController
后,你不再需要在每个请求处理方法上都显式添加@ResponseBody
注解。 - 返回值处理:
- 方法的返回值通常会被 Spring 的
HttpMessageConverter
转换为某种格式(如 JSON、XML)然后发送给客户端。 - 如果类路径下有 Jackson 库 (通常通过
spring-boot-starter-web
或spring-boot-starter-json
引入),Spring Boot 会自动配置 Jackson 作为默认的 JSON 转换器。因此,返回一个 POJO 对象通常会自动序列化为 JSON 字符串。 - 也可以返回
ResponseEntity
对象,这样可以更精细地控制 HTTP 响应的状态码、头部信息和响应体。
- 方法的返回值通常会被 Spring 的
- 与
@Controller
的区别:@Controller
: 通常用于传统的 Spring MVC 应用,其方法返回值一般是视图名称(如 JSP 文件名、Thymeleaf 模板名),然后由视图解析器解析为最终的视图。如果需要返回数据作为响应体,则需要在方法上额外添加@ResponseBody
。@RestController
: 专门为构建 RESTful API 设计,所有方法默认将数据直接写入响应体。
- 请求映射注解: 通常与请求映射注解(如
@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
,@RequestMapping
)配合使用,来定义处理特定 HTTP 请求路径和方法的处理器方法。- 例如:
@RestController @RequestMapping("/api/users") public class UserController {@GetMapping("/{id}")public User getUserById(@PathVariable Long id) {// ... 逻辑来获取用户return user; // User 对象会被转换为 JSON}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {// ... 逻辑来创建用户return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);} }
- 例如:
- 组件扫描: 类被
@RestController
注解后,如果它所在的包被@ComponentScan
(或 Spring Boot 应用主类上的@SpringBootApplication
)扫描到,Spring IoC 容器会自动将其注册为一个 Bean。 - Spring Boot 自动配置: 在 Spring Boot 应用中,如果使用了
spring-boot-starter-web
,那么构建 RESTful API 时,@RestController
是首选的注解。
总结:@RestController
通过组合 @Controller
和 @ResponseBody
,极大地简化了创建 RESTful Web 服务控制器的过程,使得开发者可以专注于业务逻辑,而方法的返回值会自动转换为适合网络传输的格式(通常是 JSON)。