You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OkHttp POST请求MediaType设置及与Content-Type区别问题咨询

OkHttp POST请求问题解答

1. 目标代码的作用

.post(RequestBody.create(MediaType.parse("text/x-markdown"), postBody)) 这行代码的作用是构造POST请求的请求体实体:

  • 第二个参数postBody是你要发送的实际请求内容,也就是员工ID字符串(示例为ABC123)
  • 第一个参数MediaType.parse("text/x-markdown")是声明该请求体的MIME类型,告诉服务端本次请求发送的是Markdown格式的文本内容
  • 最终将构造好的请求体绑定到POST请求中

2. 与手动设置的content-type请求头的区别

OkHttp的请求发送逻辑有明确的优先级规则:

  • 只要RequestBody指定了非空的MediaType,OkHttp会自动生成Content-Type请求头,直接覆盖你通过addHeader手动设置的content-type值,你代码中手动添加的content-type: application/json;charset=UTF-8实际不会生效,最终请求发出的Content-Type为text/x-markdown
  • 只有当RequestBody的MediaType传入null时,你手动设置的Content-Type头才会生效
  • 你当前服务端返回500的核心原因就是这个类型不匹配:服务端预期的请求体格式(要么是JSON要么是普通纯文本)和实际收到的text/x-markdown类型不符,无法解析请求体就抛出内部错误

3. 常用合法MediaType类型

MediaType遵循标准MIME类型规范,和后端开发场景相关的高频合法类型如下:

  • text/plain:普通无格式纯文本,你当前发送单行员工ID的场景用这个类型最合理
  • application/json:JSON格式数据,是前后端接口交互最常用的类型
  • application/x-www-form-urlencoded:普通表单键值对提交的默认类型
  • multipart/form-data:带文件上传的表单提交类型
  • application/octet-stream:通用二进制流类型,用于传输任意文件
  • text/xml/application/xml:XML格式数据类型

4. 修复方案

根据你的场景需求二选一即可:

  1. 若服务端预期接收纯文本格式的员工ID:
    将MediaType修改为MediaType.parse("text/plain;charset=utf-8"),删除手动添加的content-type头避免冲突
  2. 若服务端预期接收JSON格式的参数:
    先把postBody改为符合JSON规范的字符串(例如"{\"staffId\":\"ABC123\"}"),再将MediaType修改为MediaType.parse("application/json;charset=utf-8"),删除手动添加的content-type头

内容的提问来源于stack exchange,提问作者Al Grant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:12:01