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

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

🎯 核心区别

  • 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.jsqmd.com/news/43592/

相关文章:

  • 【LVGL】圆弧部件
  • 【马来西亚理工大学主办,SPIE出版】2025年量子计算与通信技术国际学术会议(ICQCT 2025)
  • 大数据毕业设计:python新闻数据可视化分析系统 时间序列预测算法 ARIMA预测模型 机器学习 爬虫 SnowNLP情感分析(源码+文档)✅ - 详解
  • 详细介绍:Next steps for BPF support in the GNU toolchain
  • 2025年电机生产流水线实力厂家权威推荐:电机生产线/无刷电机自动生产线/电机自动化生产源头厂家精选
  • 2025出国留学机构有哪些
  • 2025成都留学中介机构排名前十
  • 2025美国留学开除处理机构推荐,靠谱申诉/转学/身份保障服务哪家好
  • [题解]BYOI Round 1 T1~T2
  • 【马来亚大学主办,SPIE出版,快至会后4个月检索】2025年医学图像处理与识别国际会议(IPOR 2025)
  • 2025年不锈钢垃圾桶实力厂家权威推荐榜单:金属垃圾桶源头厂家精选
  • 深入解析:Tauri 1.x和2.x的区别对照表
  • C#Lazy
  • 加氢站安全监测选型:别让传感器成为你的定时炸弹
  • linux anaconda
  • 服务器接口调用微信小程序获取手机号接口报:The SSL connection could not be established, see inner exception.
  • 事倍功半是蠢蛋62 docker 语句儿生产力
  • 【重磅升级!迅为iTOP-Hi3403开发板SDK全面升级至Linux 6.6内核】
  • 2025留学美国被开除怎么办?申诉挽回/学业急救/身份保留/转学规划/签证补救机构哪家强
  • 2025年国内档案馆展示柜厂家综合实力排行榜TOP10
  • 2025年陕西省探矿权采矿权技术服务企业权威推荐榜单
  • WPS用Qt还情有可原
  • C#技术
  • 2025年山西口碑好的纪念馆展示柜厂家十大排名权威推荐
  • 2025年评价高的UV 软膜广告灯箱厂家最新TOP排行
  • 2025年山西口碑好的纪念馆展示柜定制厂家排行Top10推荐
  • C# 14 新功能全面解析:提升生产力与性能的革命性更新
  • 【隐语SecretFlow隐私计算】如何使用 Kuscia API 运行一个 SecretFlow Serving
  • 2025年优秀的软件行业体系认证三体系认证品牌实力推荐榜
  • linux ajax