Дооснащение @Body, отображаемое как параметр в HTTP-запросе
Ранее я использовал Square Retrofit для вызова веб-API @GET
, но при попытке отправить JSON в качестве @BODY
в вызове @POST
на сервере (Rails) JSON отображается как Параметры, а не запрос тела.
Я понимаю, что @BODY
добавит этот параметр метода в запрос в теле.
Любая идея, что я делаю неправильно?
WebAPI
@POST("/api/v1/gear/scans.json")
Response postScans(
@Header(HEADER_AUTH) String token,
@Body JsonObject scans
);
Сделать веб-запрос:
RestAdapter restAdapter = new RestAdapter.Builder()
.setServer(api_url)
.build();
WebApi webApi = restAdapter.create(AssetsWebApi.class);
Response response = webApi.postScans(auth_token, valid_json);
Ответы
Ответ 1
Оказывается, если вы хотите, чтобы данные POST были частью тела запроса, вам необходимо аннотировать метод интерфейса API как @FormUrlEncoded
и передать содержимое тела как @Field
, как показано ниже:
@FormUrlEncoded
@POST("/api/v1/gear/scans.json")
Response postScans(
@Header(HEADER_AUTH) String token,
@Field("scans") JsonArray scans
);
Асинхронный вызов для @Rickster:
@POST("/api/v1/gear/scans.json")
void postScans(
@Header(HEADER_AUTH) String token,
@Body JsonObject scans,
Callback<PostSuccessResponseWrapper> callback
);