Problema con la respuesta de la aplicación / json que se escapó en Spring Integration 4.2
Crear un proxy HTTP en Spring Integration 4.2.1.RELEASE. Environment utiliza la última lista de materiales de la plataforma 2.0.0.RELEASE, incluida una capa spring-webmvc, que se ejecuta en Tomcat7.
Las llamadas son "application / json", pasadas a través de la capa web a un punto final del servidor REST diferente (el método setupUrl reescribe la URL). El código llama con éxito al servidor externo, obtiene una buena respuesta, luego desbarata la respuesta antes de que vuelva a la persona que llama.
@Bean
public IntegrationFlow httpProxyFlow() {
return IntegrationFlows
.from((MessagingGateways g) ->
g.httpGateway("/my-service/**")
.messageConverters(new MappingJackson2HttpMessageConverter())
.payloadFunction(httpEntity ->
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest()
.getQueryString())
.requestPayloadType(String.class))
.handleWithAdapter(a ->
a.httpGateway(this::setupUrl)
.httpMethodFunction(this::getMethodFunction)
.errorHandler(new PassThroughErrorHandler())
.encodeUri(false)
.expectedResponseType(String.class)
).get();
}
La llamada directamente al punto final REST regresa
{"afiliado": "prueba", "productor": "TST", "productos" ...
Mientras la llamada a través de Spring Integration regresa
"{\" afiliado \ ": \" prueba \ ", \" productor \ ": \" TST \ ", \" productos \ ": [{\"
Intenté muchas combinaciones de agregar StringHttpMessageConverter al adaptador de salida. Jugar con las codificaciones (UTF-8 en lugar de ISO-8859-1). Algo está jugando con la cadena de respuesta, y parece ser DESPUÉS de que deja Spring Integration tan cerca como puedo ver. La última vez que Integration lo toca es la línea 117 de HttpRequestHandlingMessagingGateway.handleRequest (). Todavía parece correcto en el objeto de respuesta allí.
Es posible que el problema sea realmente con spring-mvc, que es el primer lugar donde veo la cadena destrozada en la depuración.