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

Android中Retrofit 2.0提交x-www-form-urlencoded格式JSON数据失败怎么办?

解决Retrofit 2.0提交x-www-form-urlencoded数据失败的问题

我来帮你分析下问题出在哪:你在代码里用@Body传递JSONObject,虽然手动加了Content-Type: application/x-www-form-urlencoded的Header,但Retrofit会自动把JSONObject序列化为JSON字符串,而服务器期望的是表单键值对(比如role=owner&id=27001)的格式,两者不匹配,所以请求失败了。

下面给你两种靠谱的解决方案:

方案一:用@FormUrlEncoded + @Field(推荐)

这种方式是Retrofit官方推荐的提交表单数据的方式,会自动帮你处理Content-Type和请求体格式:

1. 修改接口定义

// 去掉手动的Content-Type Header,用@FormUrlEncoded替代
@FormUrlEncoded
@POST("/api/jsonws/pushUserData")
Call<ResponseBody> pushData(
    @Field("role") String role,
    @Field("id") String id
);

2. 调用接口

直接传入参数即可,不用再构建JSONObject:

ApiInterface apiInterface = ApiClient.getClientAuthentication();
Call<ResponseBody> call = apiInterface.pushData("owner", "27001");

call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        // 处理请求成功的逻辑
        if (response.isSuccessful()) {
            // 可以在这里获取返回数据
        }
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        // 处理请求失败的逻辑,比如打印错误信息
        t.printStackTrace();
    }
});

方案二:用FormBody构建请求体

如果你的参数比较多或者需要动态构建,可以用FormBody来手动组装表单数据:

1. 修改接口定义

@POST("/api/jsonws/pushUserData")
Call<ResponseBody> pushData(@Body RequestBody requestBody);

2. 构建并传递请求体

// 用FormBody.Builder组装键值对
RequestBody formBody = new FormBody.Builder()
    .add("role", "owner")
    .add("id", "27001")
    .build();

ApiInterface apiInterface = ApiClient.getClientAuthentication();
Call<ResponseBody> call = apiInterface.pushData(formBody);

// 同样处理回调逻辑
call.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        // 成功处理
    }

    @Override
    public void onFailure(Call<ResponseBody> call, Throwable t) {
        // 失败处理
    }
});

这两种方式都能生成服务器期望的x-www-form-urlencoded格式请求体,你可以根据自己的场景选择其中一种。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:32:46