Модернизация 2 только с данными формы

Я пытаюсь сделать запрос POST с помощью Retrofit 2. Тип запроса form-data NOT application/x-www-form-urlencoded.

Я только отправляю данные не файлы в запросе, а ответ - в форме JSON.

Я пробовал @FormUrlEncoded, @Multipart, но он не работает.

Я пробовал следующий запрос

1. Первая попытка

@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlanName(@Field(Constants.ACTION_ID) String actionId, @Field(Constants.OFFER_CODE) String offerCode);

2. Вторая попытка

@Headers({"Content-Type: multipart/form-data","Content-Type: text/plain"})
@FormUrlEncoded
@POST("XXXX")
Call<PlanResponse> getPlans(@Body @FieldMap(encoded = false) Map<String, String> data);

3. Третья попытка

@Headers("Content-Type: multipart/form-data")
@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) String actionId, @Part(Constants.OFFER_CODE) String offerCode);

Я получаю только тело null. Он работает с POSTMAN.

Я также искал form-data и application/x-www-form-urlencoded и обнаружил, что если данные двоичные, используйте form-data, и если данные ASCII, то используйте application/x-www-form-urlencoded

Я пытаюсь найти Являются ли данные формы не поддерживаются с помощью Retrofit?

Запрос POSTMAN

Cache-Control: no-cache
Postman-Token: XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXX
Content-Type: multipart/form-data; boundary=----    WebKitFormBoundaryXXXXXXXXXXXX


 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="actionId"

1000
 ----WebKitFormBoundaryXXXXXXXXXXXX
Content-Disposition: form-data; name="offerCode"

MYCODE
----WebKitFormBoundaryXXXXXXXXXXXX

Я могу добавить только HTTP-код, сгенерированный из POSTMAN

Ответ 1

В retrofit 2.0 для выполнения POST-запроса, как указано выше, вы должны использовать тип RequestBody для своего параметра, подобного этому.

@Multipart
@POST("XXXX")
Call<PlanResponse> myPlans(@Part(Constants.ACTION_ID) RequestBody actionId, @Part(Constants.OFFER_CODE) RequestBody offerCode);

А вот как получить requestBody из String.

String somevalue = "somevalue";
RequestBody body = RequestBody.create(MediaType.parse("text/plain"), somevalue);