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

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.lryc.cn/news/2397506.html

相关文章:

  • C++中新式类型转换static_cast、const_cast、dynamic_cast、reinterpret_cast
  • AXI 协议补充(二)
  • Linux 基础指令入门指南:解锁命令行的实用密码
  • 标准精读:2025 《可信数据空间 技术架构》【附全文阅读】
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试官和面试记录的分享功能(2)
  • Webug4.0靶场通关笔记05- 第5关SQL注入之过滤关键字
  • ONLYOFFICE文档API:更强的安全功能
  • 深入浅出MQTT协议:从物联网基础到实战应用全解析
  • 解析楼宇自控系统:分布式结构的核心特点与优势展现
  • C#数字图像处理(三)
  • STM32 智能小车项目 L298N 电机驱动模块
  • SQL Transactions(事务)、隔离机制
  • 【动画】unity中实现骨骼蒙皮动画
  • VSCODE的终端无法执行npm命令
  • Langchian - 自定义提示词模板 提取结构化的数据
  • 【机器学习基础】机器学习入门核心:Jaccard相似度 (Jaccard Index) 和 Pearson相似度 (Pearson Correlation)
  • QT之头像剪裁效果实现
  • apptrace 视角下移动端深度链接技术与优势​
  • 微前端之micro-app数据通信
  • 【GPT入门】第40课 vllm与ollama特性对比,与模型部署
  • unity开发棋牌游戏
  • Nat Commun项目文章 ▏小麦CUTTag助力解析转录因子TaTCP6调控小麦氮磷高效利用机制
  • Qt OpenGL 相机实现
  • 云原生时代 Kafka 深度实践:03进阶特性与最佳实践
  • 基于关联表字段映射的批量数据更新 SQL 实现方案(AIGC)
  • Hadoop复习(二)
  • C 语言开发中常见的开发环境
  • vscode命令行debug
  • Matlab作图之 subplot
  • Springboot 项目一启动就获取HttpSession