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.
- ¿Cómo recuperar cuerpo de respuesta con RxAndroid y Retrofit 2?
- Reajuste de campos opcionales y obligatorios
- Retrofit 2.x: Cabecera de registro para la solicitud y la respuesta
- Cómo separar la lógica de la aplicación de la capa de red en Android usando Retrofit 2
- Retrofit2.0 obtiene MalformedJsonException mientras el json parece correcto?
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
- Obtención de solicitud de contenido corporal mediante el método POST de Retrofit 2.0
- No se pueden POSTAR datos multipart de retrofit 2
- ¿Cómo podemos manejar diferentes tipos de respuesta con Retrofit 2?
- Android - Retrofit 2 - Resultado del autenticador
- Retrofit 2 (en Android) después de la implementación, ¿Dónde están mis elementos JSON?
- Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
- HttpLoggingInterceptor no registra con retrofit 2
- No se puede convertir el objeto Subclase en cuerpo de solicitud json en Retrofit 2.0 con GsonConverterFactory
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);
- WebView no se desplazará en Android 2.x
- Obtener id token en la aplicación de Android y verificarlo en el servidor de back-end (¿Cómo usar id token?)