Spring Boot,注解,@RestController

发布于:2025-06-02 ⋅ 阅读:(32) ⋅ 点赞:(0)

@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-webspring-boot-starter-json 引入),Spring Boot 会自动配置 Jackson 作为默认的 JSON 转换器。因此,返回一个 POJO 对象通常会自动序列化为 JSON 字符串。
    • 也可以返回 ResponseEntity 对象,这样可以更精细地控制 HTTP 响应的状态码、头部信息和响应体。
  • @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
          }
      
          @PostMapping
          public 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)。