У меня есть модифицированный интерфейс (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
.
Как мне сделать этот вызов http только с JSONObject? Я думаю, что может быть что-то не так с тем, как я определяю Content-Type, но я не могу понять это.