Retrofit 2 con sólo datos de formulario

Estoy intentando hacer la petición del POSTE usando el Retrofit 2. El tipo de la petición es el form-data NO application/x-www-form-urlencoded .

Estoy publicando solamente los datos no los archivos en la petición y la respuesta está en la forma de JSON.

He intentado @FormUrlEncoded, @Multipart pero no está funcionando.

He intentado siguiente solicitud

1. Primer intento

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

2. Segundo intento

 @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. Tercer intento

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

Sólo estoy recibiendo el cuerpo como nulo . Está trabajando con el POSTMAN.

También he buscado datos de form-data y application/x-www-form-urlencoded y encontré que si los datos son binarios, entonces use form-data y si los datos son ASCII entonces use application/x-www-form-urlencoded

Estoy tratando de encontrar ¿Es el formato de datos no es compatible con el Retrofit?

Solicitud de 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 

Puedo solamente agregar el código generado HTTP cortado de POSTMAN

En retrofit 2.0 para realizar la solicitud POST como anteriormente, debe utilizar el tipo RequestBody para su parámetro como este.

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

Y aquí cómo obtener requestBody de String.

 String somevalue = "somevalue"; RequestBody body = RequestBody.create(MediaType.parse("text/plain"), somevalue); 
  • Okhttp siempre reintento conexión fallida
  • RxJava / Retrofit - ¿Cómo puedo obligar a los usuarios a usar una subclase específica de suscriptor?
  • InterruptedIOException al usar Retrofit2 con rx cuando retryOn
  • Retrofit "IllegalStateException: Ya ejecutado"
  • ¿Cómo usar AutoValue con Retrofit 2?
  • ¿Cómo registrar el cuerpo de solicitud y respuesta con Retrofit-Android?
  • Retrofit 2 cómo obtener la respuesta de objetos anidados json (android)
  • Mantener un campo JSON como String al deserializar usando Jackson
  • Retrofit 2: ¿Cómo establecer tiempos de espera individuales en solicitudes específicas?
  • IllegalArgumentException: No se pudo localizar el adaptador de llamada para rx.Observable RxJava, Retrofit2
  • Prueba de unidad Retrofit api call con Mockito - ArgumentCaptor
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.