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

spring mvc 创建restapi 笔记

@RestController
@RequestMapping("/spittles")
public class SpittleController {

    // 示例:使用 @RequestBody 接收 JSON 并自动转换为 Spittle 对象
    @PostMapping
    public Spittle saveSpittle(@RequestBody Spittle spittle) {
        // 此时 Spring 已经把请求体中的 JSON/XML 解析成了 spittle 对象
        // 你可以直接使用 spittle 做保存、处理等操作
        return spittle; 
        // 这里返回的 spittle 会再次被自动转换为 JSON 并写到响应体中
    }
}

每个注解都是什么意思? 有什么作用?

首先知道,一个流程,例如我们一个请求过来,格式是json格式。并且是url过来。

@RestController:@Controller + @ResponseBody

类中所有方法生效,这意味着该控制器的所有方法返回值默认都直接写到 HTTP 响应体,而非去渲染一个视图(JSP、Thymeleaf 等)
这个是为前后端分离项目后,不需要去渲染,有这个注解就会跳过这一步。直接返回http相应体。

@Controller:如果方法返回一个字符串,Spring 会默认将其视为“视图名”,再由视图解析器找到对应的模板去渲染 HTML 页面。
@RestController:所有方法返回值会直接序列化成 JSON(或其他格式)写回客户端(也就是常说的返回纯数据,不走视图渲染)
@RestController 一般用于编写 RESTful API,客户端(例如前端框架Vue/React或Postman)拿到的是 JSON 数据,而不是一个服务端渲染好的页面。

@RequestMapping(“/spittles”):统一给这个控制器的所有方法加上路径前缀 /spittles。

我在类上用 @PostMapping,方法上也用 @PostMapping 可以吗?”

技术上虽然可能不报错,但实际很少这么做。通常类上只设置“公共路径前缀”,不限定 HTTP 方法;具体方法用 @PostMapping 等区分 GETPOSTPUT…… 这样更灵活,也更符合 REST 设计。

@RequestBody 是序列化标识吗?”

更准确说是**“反序列化标识”:告诉 Spring “请求体里是 JSON/XML,要把它转换为**某个 Java 对象当作参数”。
而 @ResponseBody(或 @RestController) 则用于“把返回的 Java 对象序列化成 JSON/XML 写回响应体”。

Accept头部包含 application/json 的请求?

@RequestMapping 或 @GetMapping 中加上 produces=“application/json”,告诉 Spring 只能满足 “希望拿到 JSON” 的客户端。
如果请求头中没有 Accept: application/json,又没有其他匹配的控制器方法,Spring 就不会执行这个方法,会返回 406(Not Acceptable)。


http://www.kler.cn/a/524991.html

相关文章:

  • 第4章 基于中点电流的NPC逆变器中点电压平衡策略
  • 搜索引擎友好:设计快速收录的网站架构
  • (非技术)从一公里到半程马拉松:我的一年跑步经历
  • 【C++题解】1014. 编程求1+1/2+1/3+...+1/n
  • 【性能优化专题系列】利用CompletableFuture优化多接口调用场景下的性能
  • Linux 如何使用fdisk进行磁盘相关的操作
  • 啊哈?白宫正在调查 DeepSeek 人工智能对国安的影响
  • C++二叉树进阶
  • 深入理解文件描述符
  • deepseek-r1(Mac版 安装教程)
  • 汽车蓝牙钥匙定位仿真小程序
  • 【新春不断更】题海拾贝:P1878 舞蹈课
  • 【论文复现】基于维度狩猎学习的改进秃鹰搜索算法用于自动驾驶问题
  • 多模态论文笔记——NaViT
  • Android 自定义View时四个构造函数使用详解
  • C语言中的局部变量和全局变量有什么区别?
  • 谷氨酸:大脑功能的多面手
  • 大数据治理实战:架构、方法与最佳实践
  • 12JavaWeb——SpringBootWeb登录认证
  • 【某大厂一面】HashSet底层怎么实现的