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

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

相关文章:

  • WEB3——开发者怎么查看自己的合约日志记录
  • Docker安装mitproxy
  • 【STM32F1标准库】理论——定时器/计数器中断
  • HackMyVM-Jabita
  • mysql核心知识点
  • Vue初始化脚手架
  • 【存储基础】NUMA架构
  • C# await与wait的区别
  • go语言的GMP(基础)
  • 大模型赋能低空经济:从技术突破到应用场景拓展
  • Mybatis-Plus 学习
  • LangChain-结合GLM+SQL+函数调用实现数据库查询(一)
  • 第1章 数据分析简介
  • 测试总结(二)
  • 前端框架进化史
  • Windows系统时间怎么设置
  • 笔试笔记(运维)
  • ∑ 1/n 调和级数 是 发散的
  • Python打卡 DAY 42
  • 什么是临时表?临时表与普通表区别?
  • 做游戏网站的目地/百度广告怎么做
  • 哪些网站可以做付费视频/2023年10月疫情还会严重吗
  • 玉溪网站建设制作/潍坊在线制作网站
  • 网站建设赵玉敏/东莞seo建站哪家好
  • 企业网站建设哪家好/nba最新交易动态
  • 大连效果图制作公司/东莞关键词优化平台