springboot~通过集成测试来理解Accept和Content-Type

news/2025/11/18 14:06:05/文章来源:https://www.cnblogs.com/lori/p/19237278

🎯 核心区别

  • Content-Type:告诉服务器我发送的数据是什么格式
  • Accept:告诉服务器我希望接收什么格式的响应数据

📋 详细说明

1. Content-Type (内容类型)

  • 作用:描述请求体的格式
  • 使用场景:当你的请求有请求体时(如POST、PUT请求)
  • 示例Content-Type: application/json 表示"我发送的是JSON格式的数据"
// 在MockMvc中设置Content-Type
mockMvc.perform(post("/api/users").contentType(MediaType.APPLICATION_JSON)  // 告诉服务器请求体是JSON.content("{\"name\":\"John\", \"age\":30}"))

2. Accept (接受类型)

  • 作用:描述客户端期望的响应格式
  • 使用场景:任何请求(GET、POST、PUT、DELETE等)
  • 示例Accept: application/json 表示"我希望接收JSON格式的响应"
// 在MockMvc中设置Accept
mockMvc.perform(get("/api/users/1").accept(MediaType.APPLICATION_JSON))  // 期望服务器返回JSON

🔄 实际应用场景

场景1:POST请求发送JSON,期望返回JSON

// 这种情况需要同时设置Content-Type和Accept
mockMvc.perform(post("/api/users").contentType(MediaType.APPLICATION_JSON)  // 我发送JSON.accept(MediaType.APPLICATION_JSON)       // 我希望收到JSON.content("{\"name\":\"John\", \"age\":30}")).andExpect(status().isCreated());

场景2:GET请求,期望返回JSON

// 只有请求,没有请求体,所以只需要Accept
mockMvc.perform(get("/api/users").accept(MediaType.APPLICATION_JSON))      // 只设置Accept.andExpect(status().isOk());

场景3:POST请求发送JSON,不关心响应格式

// 只设置Content-Type,不设置Accept
mockMvc.perform(post("/api/users").contentType(MediaType.APPLICATION_JSON)  // 只设置Content-Type.content("{\"name\":\"John\", \"age\":30}"));

📊 总结表格

参数 作用 使用场景 示例值
Content-Type 描述请求体格式 POST、PUT等有请求体的操作 application/json
Accept 描述期望的响应格式 任何需要特定响应格式的操作 application/json

🛠️ 实际代码示例

完整的POST请求测试示例

@Test
public void testCreateUser() throws Exception {// 准备请求数据UserCreateRequest request = new UserCreateRequest("John", "john@example.com");String requestJson = new ObjectMapper().writeValueAsString(request);// 执行请求mockMvc.perform(post("/api/users").contentType(MediaType.APPLICATION_JSON)  // 必须:请求体是JSON.accept(MediaType.APPLICATION_JSON)       // 可选:期望JSON响应.content(requestJson)).andExpect(status().isCreated()).andExpect(jsonPath("$.id").exists()).andExpect(jsonPath("$.name").value("John"));
}

💡 记忆技巧

  • Content-Type → 我发送什么 → 关注请求体
  • Accept → 我接受什么 → 关注响应体

⚠️ 注意事项

  1. POST请求必须设置Content-Type,否则服务器不知道如何解析请求体
  2. Accept是可选的,如果不设置,服务器通常会返回默认格式
  3. 如果服务器不支持客户端请求的Accept格式,应该返回406状态码

所以,对于你的POST请求构建JSON的情况,必须设置Content-Type: application/json,而Accept根据你是否对响应格式有要求来决定是否设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LVGL】圆弧部件

引言 圆弧部件(lv_arc)圆弧部件相关 api 函数 注意:范围值设置最好放在当前值之前。 背景弧角度限定了前景弧角度的范围。 尽量不要用前景弧设置函数,假如与当前值对应不上则会出问题。 设置旋转角度实际上指的是圆…

【马来西亚理工大学主办,SPIE出版】2025年量子计算与通信技术国际学术会议(ICQCT 2025)

【马来西亚理工大学主办,SPIE出版】2025年量子计算与通信技术国际学术会议(ICQCT 2025)2025年量子计算与通信技术国际学术会议(ICQCT 2025) 2025年11月28日-11月30日 | 马来西亚吉隆坡 截稿时间:多轮截稿,官网…

大数据毕业设计:python新闻数据可视化分析系统 时间序列预测算法 ARIMA预测模型 机器学习 爬虫 SnowNLP情感分析(源码+文档)✅ - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:Next steps for BPF support in the GNU toolchain

详细介绍:Next steps for BPF support in the GNU toolchainpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

2025年电机生产流水线实力厂家权威推荐:电机生产线/无刷电机自动生产线/电机自动化生产源头厂家精选

在工业自动化浪潮的推动下,电机生产流水线正朝着高精度、智能化与数字化的方向快速发展。 在全球工业自动化市场规模预计突破3200亿美元的背景下,电机作为工业传动的核心部件,其生产流水线的技术水平直接影响电机的…

2025出国留学机构有哪些

2025出国留学机构有哪些一、2025年出国留学,如何选择靠谱的中介机构?随着2025年留学申请季的临近,许多学生和家长开始困惑:面对众多的留学中介,到底哪一家更适合自己的需求?是不是经常在搜索时看到诸如“留学中介…

2025成都留学中介机构排名前十

2025成都留学中介机构排名前十一、成都留学中介怎么选?这些高频问题帮你理清思路作为一位拥有15年经验的国际教育规划师,我经常被成都的学生和家长问及如何选择留学中介。在2025年10月24日的今天,留学市场依然充满变…

2025美国留学开除处理机构推荐,靠谱申诉/转学/身份保障服务哪家好

2025美国留学开除处理机构推荐,靠谱申诉/转学/身份保障服务哪家好随着美国留学人数的持续增长,学术诚信审核趋严、文化适应差异等问题导致的美国大学开除案例逐年上升。被美国大学开除不仅关乎学业中断,更直接影响F…

[题解]BYOI Round 1 T1~T2

比赛页面 VP. T1. P14524 意识解离 每出现一个 \(a[i-1]<a[i]\)(特别地,令 \(a[0]=-\infty\)),说明必须新增一个长度为 \(n-i+1\) 的序列。 因此,有解的充要条件是 \(\forall i\in[1,n],a[i]\ge \sum_{j=1}^i …

【马来亚大学主办,SPIE出版,快至会后4个月检索】2025年医学图像处理与识别国际会议(IPOR 2025)

【马来亚大学主办,SPIE出版,快至会后4个月检索】2025年医学图像处理与识别国际会议(IPOR 2025)2025年医学图像处理与识别国际会议(IPOR 2025) 2025年11月28日-11月30日 | 马来西亚吉隆坡孟沙温德姆至尊酒店 截稿…

2025年不锈钢垃圾桶实力厂家权威推荐榜单:金属垃圾桶源头厂家精选

随着城市化进程的加快和环保意识的提升,不锈钢垃圾桶因其耐用性、易清洁性和美观性,成为公共场所、商业区域及社区管理的首选设备。根据市场调研数据显示,2024年中国不锈钢垃圾桶市场规模同比增长12%,其中分类垃圾…

深入解析:Tauri 1.x和2.x的区别对照表

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

C#Lazy

Lazy<T>是一个用于实现延迟初始化(Lazy Initialization)的泛型类,它可以将昂贵对象的创建推迟到第一次实际使用时。这种模式能有效提升应用程序的启动性能和资源利用率。 💡 核心概念与价值 Lazy<T>的…

加氢站安全监测选型:别让传感器成为你的定时炸弹

2025年3月,江苏某加氢站因传感器误报导致全站紧急关停,直接损失超50万元;同年5月,浙江某站点却创造了连续2年零故障的行业纪录——同样的氢能风口,截然不同的安全结局。这背后藏着一个被90%采购者忽视的真相:加氢…

linux anaconda

Anaconda 是一个由 Anaconda, Inc. 开发的开源 Python 发环境和包管理系统,主要用于在 Linux、MacOS 和 Windows 上安装和管理 Python 环境。它特别适合用于科学计算、数据科学、机器学习等场景。 一、Anaconda 在 Li…

服务器接口调用微信小程序获取手机号接口报:The SSL connection could not be established, see inner exception.

使用了linux服务器,发布.net8的webapi,其中登录接口调用了微信小程序获取手机号的接口,本地测试环境一直没有问题,当发布到服务器之后一直报:The SSL connection could not be established, see inner exception.…

事倍功半是蠢蛋62 docker 语句儿生产力

docker compose restart backend git stash git pull git stash pop

ExportExcel-AnnotationList-反射

-------------------------------------------------------------------------------------------------------- 这段代码用于通过自定义的 ExportExcel 工具类生成 Excel 文件并写入输出流,主要功能是导出案件信息数…

【重磅升级!迅为iTOP-Hi3403开发板SDK全面升级至Linux 6.6内核】

【重磅升级!迅为iTOP-Hi3403开发板SDK全面升级至Linux 6.6内核】重磅升级!迅为iTOP-Hi3403开发板SDK全面升级至Linux 6.6内核各位开发者朋友们,大家好! 亲爱的开发者们,好消息来啦!迅为电子始终走在技术前沿,现…

2025留学美国被开除怎么办?申诉挽回/学业急救/身份保留/转学规划/签证补救机构哪家强

2025留学美国被开除怎么办?申诉挽回/学业急救/身份保留/转学规划/签证补救机构哪家强随着赴美留学人数的持续攀升,学术诚信审核严格、GPA不达标、出勤异常等问题导致的留学生被开除情况也日益增多。美国留学被开除不…