当前位置: 首页 > ai >正文

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-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}@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)。

http://www.xdnf.cn/news/10322.html

相关文章:

  • <5>, Qt系统相关
  • 哈 希 表
  • 快速掌握 GO 之 RabbitMQ 结合 gin+gorm 案例
  • 设计模式——策略设计模式(行为型)
  • GitLab CI、GitHub Actions和Jenkins进行比较
  • DAY 18 推断聚类后簇的类型
  • 核心机制:TCP 断开连接(四次挥手)
  • learn react course
  • TDengine 集群容错与灾备
  • 多自主水下航行器(AUV)协同围捕策略
  • 汽车安全:功能安全FuSa、预期功能安全SOTIF与网络安全Cybersecurity 解析
  • 【前端】成长路线
  • C#语音录制:使用NAudio库实现语音录制功能详解
  • MyBatis、MyBatis-Plus与MyBatis-Flex的区别
  • .net Avalonia应用程序生命周期
  • 经典面试题:一文了解常见的缓存问题
  • 视觉分析明火检测助力山东化工厂火情防控
  • 【前端】Vue中使用CKeditor作为富文本编辑器
  • Python应用for循环临时变量作用域
  • MATLAB中properties函数用法
  • 408《数据结构》——第二章:线性表
  • 【harbor】--配置https
  • 【LLM相关知识点】关于LLM项目实施流程的简单整理(一)
  • 操作系统学习(七)——互斥
  • 深入Java性能调优:原理详解与实战
  • STM32F103C8T6,bxCAN收发配置实例,包含ID过滤
  • 香港中乐团六月京津巡演 携多位国际艺术家献演
  • 边缘计算场景下的大模型落地:基于 Cherry Studio 的 DeepSeek-R1-0528 本地部署
  • spring事务的面试题 —— 事务的特性、传播机制、隔离机制、注解
  • 趋势直线指标