Saltar al contenido

¿Cómo usar RestTemplate con múltiples tipos de respuesta?

Nuestros programadores estrellas agotaron sus reservas de café, por su búsqueda diariamente por la solución, hasta que Ezequiel encontró el resultado en Bitbucket así que ahora la comparte contigo.

Solución:

Como se imaginaría, el problema es que el backend debería devolverle errores con códigos de error HTTP, para eso están ahí.

Pero como dijiste, no tienes control sobre el backend, así que lo que puedes hacer es obtenerlo primero como una cadena.

ResponseEntity dto = restTemplate.postForObject(url, postData, String.class);

A continuación, puede intentar analizar el string respuesta como un MainDTO con Jackson o Gson (lo que sea que tengas en tu proyecto, lo cual deberías, porque creo que RestTemplate de Spring usa cualquiera de ellos internamente) con un intento/captura y si falla, entonces intentas analizarlo con tu ErrorDto.

Actualizar

Oh, acabo de leer que era un XML servicio, no un JSON encendido, el enfoque anterior sigue siendo válido, pero en lugar de usar Jackson o Gsonpuedes usar SimpleXML (http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#deserialize) que le permite deserializar XML de una manera “fácil”, solo necesita anotar sus modelos con sus anotaciones que son descritas en sus tutoriales y ejemplos.

El ejemplo de Spring (http://spring.io/guides/gs/Consuming-rest-xml-android/) también podría proporcionar una idea de cómo usar SimpleXML.

Podrías implementar una costumbre ResponseErrorHandler que convierte una respuesta errónea en una RuntimeException. La conversión de mensaje Http a POJO se puede realizar reutilizando el(los) mensaje(s) Convertidor(es) del RestTemplate#setMessageConverters esta usando.

Al final de todo puedes encontrar las notas de otros programadores, tú igualmente tienes el poder dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *