我有一个改装界面(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可能有问题,但我无法弄清楚。