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

如何在Retrofit中发送携带原始JSON格式数据的POST请求?

解决Retrofit发送JSON请求体的问题

看起来你在Retrofit里发送application/json格式的POST请求时遇到了坑,我来帮你梳理下问题所在和正确的实现方式:

先说说你之前写法的问题

  1. 手动通过@Header设置Content-Type容易和Retrofit的JSON转换器自动设置的头冲突;
  2. 直接用JSONObject作为@Body参数,Retrofit默认没有对应的转换器来序列化它,所以会导致请求失败。

正确的实现方案

第一步:确保Retrofit实例配置了JSON转换器

这是核心前提,没有转换器的话,Retrofit不知道怎么把你的数据转换成JSON格式:

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("你的API基础地址")
    .addConverterFactory(GsonConverterFactory.create()) // 必须添加这个Gson转换器
    .build();

方式一:用POJO类作为请求体(推荐,类型更安全)

先创建一个对应请求结构的实体类:

public class RequestPayload {
    // 这里根据你的实际请求字段定义,比如
    private String username;
    private String email;

    // 构造方法、getter/setter,或者用Lombok的@Data注解简化
    public RequestPayload(String username, String email) {
        this.username = username;
        this.email = email;
    }
}

然后定义接口,不需要手动设置Content-Type,Gson转换器会自动帮你设置application/json:

public interface AddData {
    @POST("/Api/")
    Call<String> postData(@Body RequestPayload body);
}

方式二:如果一定要用JSONObject作为请求体

这种情况需要手动构建RequestBody并指定媒体类型:

public interface AddData {
    @POST("/Api/")
    Call<String> postData(@Body RequestBody body);
}

调用的时候这样构建请求体:

// 组装JSON数据
JSONObject jsonObject = new JSONObject();
try {
    jsonObject.put("username", "test_user");
    jsonObject.put("email", "test@example.com");
} catch (JSONException e) {
    e.printStackTrace();
}

// 构建RequestBody,指定媒体类型为application/json
RequestBody requestBody = RequestBody.create(
    jsonObject.toString(),
    MediaType.parse("application/json; charset=utf-8")
);

// 发起请求
AddData apiService = retrofit.create(AddData.class);
Call<String> call = apiService.postData(requestBody);
// 后续执行异步/同步请求...

额外提示:如果非要固定接口的Content-Type

可以用@Headers复数注解(区别于单个的@Header),不过在有Gson转换器的情况下这其实是多余的:

public interface AddData {
    @Headers("Content-Type: application/json")
    @POST("/Api/")
    Call<String> postData(@Body RequestPayload body);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:35:23