Problema com escape de application / json sendo escapado no Spring Integration 4.2
Criando um proxy HTTP no Spring Integration 4.2.1.RELEASE. O Environment está usando o BOM da plataforma 2.0.0.RELEASE mais recente, incluindo uma camada spring-webmvc - em execução no Tomcat7.
As chamadas são "application / json", transmitidas pela camada da web para um ponto de extremidade do servidor REST diferente (o método setupUrl reescreve a URL). O código chama com êxito o servidor externo, obtém uma boa resposta e gerencia a resposta antes de retornar ao chamador.
@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();
}
A chamada diretamente para o terminal REST retorna
{"afiliado": "teste", "produtor": "TST", "produtos" ...
Enquanto a chamada através do Spring Integration retorna
"{\" afiliado \ ": \" teste \ ", \" produtor \ ": \" TST \ ", \" produtos \ ": [{\"
Tentei várias combinações de adição de StringHttpMessageConverter ao adaptador de saída. Brincando com as codificações (UTF-8 em vez de ISO-8859-1). Algo está mexendo com a sequência de respostas, e parece que DEPOIS deixa o Spring Integration o mais próximo possível. A última vez que o Integration toca, é na linha 117 HttpRequestHandlingMessagingGateway.handleRequest (). Ainda parece correto no objeto de resposta.
É possível que o problema seja realmente com o spring-mvc, que é o primeiro lugar em que vejo a string mutilada na depuração.