首页 > 解决方案 > 在改造 http post 请求中设置标头

问题描述

我有一个改造界面(kotlin):

interface Api {
     @POST("updates")
     fun getDetails(@Header("Authorization") token: Token,
                    @Body body: RequestBody): Single<ResponseObject>
}

当我这样称呼它时(在java中),

List<String> apps = Arrays.asList("app1", "app2");
JSONObject jsonObject = new JSONObject();
RequestBody requestBody;
try {
    jsonObject.put("apps", new JSONArray(apps));
}
catch(JSONException e) {
    e.printStackTrace();
}
requestBody = RequestBody.create(jsonObject.toString(), MediaType.get("application/json"));
api.getDetails(token, requestBody); // works

它工作并返回正确的数据。

我的问题是我不想为每个调用创建一个新的 RequestBody 对象,所以我不想接收 RequestBody,而是希望我的接口接收 JSON 对象。然而,当我尝试这个时,

interface Api {
     @POST("updates")
     fun getDetails(@Header("Authorization") token: Token,
                    @Header("Content-Type") type: String,
                    @Body body: JSONObject): Single<ResponseObject>
}

api.getDetails(token, "application/json", jsonObject); // does not work

它返回retrofit2.adapter.rxjava2.HttpException: HTTP 400错误。

如何仅使用 JSONObject 进行此 http 调用?我认为我指定 Content-Type 的方式可能有问题,但我无法弄清楚。

标签: javaandroidkotlinretrofit2okhttp

解决方案


推荐阅读