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 时,它没有修复 contentType 为 text/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 处理器模块。
我正在尝试创建一个流来发送 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 时,它没有修复 contentType 为 text/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
...
$ 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 处理器模块。