Дооснащение @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
);