在改造http发布请求中设置标题

时间:2020-02-02 08:56:05

标签: java android kotlin retrofit2 okhttp

我有一个改装界面(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对象,因此,我希望我的接口能够接收JSON对象,而不是接收RequestBody。但是,当我尝试此操作时,

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可能有问题,但我无法弄清楚。

0 个答案:

没有答案