In Spring Integration 4.2 tritt ein Problem mit application / json reponse auf.
Erstellen eines HTTP-Proxys in Spring Integration 4.2.1.RELEASE. Environment verwendet die neueste Version 2.0.0.RELEASE der Plattform BOM, einschließlich einer Spring-Webmvc-Ebene, die auf Tomcat7 ausgeführt wird.
Calls sind "application / json", die über die Webebene an einen anderen REST-Server-Endpunkt übergeben werden (die setupUrl-Methode schreibt die URL neu). Der Code ruft den externen Server erfolgreich auf, erhält eine gute Antwort und zerlegt die Antwort, bevor sie an den Anrufer zurückgegeben wird.
@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();
}
Der Aufruf direkt an den REST-Endpunkt gibt @ zurüc
{"Affiliate": "Test", "Produzent": "TST", "Produkte" ...
Während der Aufruf über Spring Integration @ zurückgi
"{" Affiliate ":" Test "," Produzent ":" TST "," Produkte ": [{"
Viele Kombinationen aus dem Hinzufügen von StringHttpMessageConverter zum Ausgangsadapter ausprobiert. Spiel mit den Kodierungen (UTF-8 statt ISO-8859-1). Irgendetwas hat mit der Antwortkette zu tun, und es scheint, als ob sie Spring Integration verlassen hat, so weit ich das beurteilen kann. Das letzte Mal, wenn Integration es berührt, ist HttpRequestHandlingMessagingGateway.handleRequest () - Zeile 117. Es sieht im Antwortobjekt dort immer noch korrekt aus.
Es ist möglich, dass das Problem wirklich bei spring-mvc liegt. Das ist der erste Punkt, an dem ich die verstümmelte Zeichenfolge beim Debuggen sehe.