Spring XD http-client 处理器发送 text/plain 而不是 application/json

Spring XD http-client processor sends text/plain instead of application/json

我正在尝试创建一个流来发送 POST 请求作为流的一部分。

stream create form-time --definition "<working source> | generate-form-transformer: transform --script=form-generation.groovy  --outputType=application/json | http-client --inputType=application/json ..." --deploy

它有效,但它将 contentType 设置为 text/plain 而不是 application/json,这会引发 400,因为我的服务器不支持它。 (虽然内容很完美JSON)。

转换器 returns 一个 XD 元组,据我所知,从元组到 JSON 的转换应该正确完成(事实上,如前所述,有效负载是正确的)。

但是,当涉及到 http-client 时,它没有修复 contentTypetext/plain;UTF-8 而不是 application/json.

有什么建议吗?我错过了什么吗?谢谢。

stream create form-time --definition " | generate-form-transformer: transform --script=form-generation.groovy --outputType=application/json | http-client --inputType=application/json ..." --deploy

您是否为 http-client 模块设置了 --outputType=application/json。此外,http-client 中的 --inputType 不是必需的,因为前一个模块的输出类型已经是 application\json。您可能打算将其设置为 --outputType?

我不相信 --inputType--outputType 转换应该设置 header,它们只是执行转换;一种技术是向 http-client...

添加 header 浓缩剂
$ git diff
diff --git a/modules/processor/http-client/config/http-client.xml b/modules/processor/http-client/config/http-client.xml
index cf7d2e2..c2ecd00 100644
--- a/modules/processor/http-client/config/http-client.xml
+++ b/modules/processor/http-client/config/http-client.xml
@@ -10,7 +10,7 @@
                        http://www.springframework.org/schema/integration/http/spring-integration-http.xsd">

        <int-http:outbound-gateway id='http-client'
-               request-channel='input' url-expression="${url}" http-method="${httpMethod}"
+               request-channel='inputX' url-expression="${url}" http-method="${httpMethod}"
                expected-response-type='java.lang.String' charset='${charset}'
                reply-timeout='${replyTimeout}' reply-channel='output'
                mapped-request-headers="${mappedRequestHeaders}"
@@ -19,5 +19,9 @@

        <channel id="output" />
        <channel id="input" />
+       <channel id="inputX" />
+       <header-enricher input-channel="input" output-channel="inputX">
+               <header name="content-type" value="application/json" />
+       </header-enricher>

现在 spring-xd-modules 中有一个 header-enricher 处理器模块。