Spring RestTemplate lanza una excepción para el error 400 pero CloseableHttpClient no

Estamos utilizando Spring versión 4.3.9 y utilizando RestTemplate para llamadas de descanso. Tenemos casos de prueba en los que intencionalmente tenemos contenido mal formateado cuando llamamos a un punto final particular (la solicitud en sí está bien, el contenido de la carga útil está mal formateado intencionalmente).

De todos modos, en estas condiciones, el punto final devuelve un objeto de respuesta con información significativa además de etiquetarlo como un error 400 (Solicitud incorrecta). RestTemplate ve el error 400 y lanza una HttpClientErrorException. Como se produce esta excepción, el objeto de respuesta es nulo.

Cuando realizo la solicitud idéntica (datos incorrectos y todo) usando la llamada regular HttpClient de apache, no se produce ninguna excepción (a pesar del error 400) y el objeto de solicitud se devuelve con información significativa (útil).

Cuando se ejecuta con una configuración extensa de registro de depuración de Spring, puedo ver que la información significativa fue devuelta definitivamente de la llamada del cliente RestTemplate, sin embargo RestTemplate arroja la excepción y, por lo tanto, no parece hacer que el mensaje esté disponible para la persona que llama.

¿Es posible que el mensaje significativo esté enterrado en la respuesta de excepción en alguna parte? Si es así, ¿cómo lo extraigo?

Si no se devuelve como parte de la excepción, ¿hay alguna manera de evitar que RestTemplate arroje esta excepción, sino que solo devuelva el objeto de respuesta como lo está haciendo HttpClient?

Gracias por cualquier respuesta!

Respuesta 1

Si tengo una clase auxiliar con métodos estáticos, ¿cómo puedo hacer mejor la inicialización? public class MyClass {// inicia un archivo de propiedades {properties.load (..)} public static String ...

En un proyecto grande, ejecuté la inspección "Declaración no utilizada", buscando métodos no utilizados. Encontró varios cientos y decidí eliminarlos de forma segura. IntelliJ analizó cada método (¿otra vez?) Y ...

Entiendo cómo funcionan los almacenes de claves para claves privadas. Básicamente, crea un almacén de claves, genera / firma / almacena las claves y, según el alias, se cargará el contenedor (JBoss, tomcat, WebLogic o WebSphere) ...

Tengo un Bytestring que necesito mostrar en la consola en Java. Bytestring es del tipo com.google.protobuf.ByteString, estoy usando: System.out.println (myByteString); sin embargo, cuando es ...