Apache Camel Rest 发送对 post 请求的响应
Apache Camel Rest send response for post request
我有一个骆驼端点,另一个应用程序发送一个 post 请求和一些数据(可能有一些其他路由)
我想处理这些数据,然后 return 返回给应用程序 POST 请求的响应。
这是我的 Camel 上下文目前的样子:
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<restConfiguration component="restlet" bindingMode="json" port="8989" enableCORS="true"/>
<rest path="/finData">
<description>User rest service</description>
<post>
<to uri="direct:update"/>
</post>
</rest>
<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<to uri="aclient://otherClient"/>
</route>
</camelContext>
如何通过 post 请求的响应从路由 sendFinData 发回一些答案?
post 对您的路线的请求收到的响应是路线末端的 ${body} 中的任何内容。
所以在你的路线的尽头,${body} 包含来自
的任何响应
<to uri="aclient://otherClient"/>
我不使用 Camel XML 但在 Java 你会这样做:
rest("/finData")
.get()
.route()
.to("direct:sendFindData")
.end();
from("direct:sendFindData")
.to("aclient://otherClient")
.process(exchange -> exchange.getIn().setBody("Hello world"))
.setBody(simple("GoodBye world")) // same thing as line above
.end();
如果您要传回给请求者的数据不是您路由中最后一次 API 调用的响应,您需要将其临时保存在某处 (exchange.properties) 并将其设置回body 稍后,或聚合响应,以便原始数据不会被覆盖。该路由应产生消费者期望的数据。对于正常的休息请求,这应该是字符串类型(如 "GoodBye world")。例如,如果你想 return JSON 确保响应主体是路由末尾的 JSON 字符串。
抱歉,我无法提供帮助XML,但希望这对您有所帮助。
如果您需要发回响应作为对带有自定义数据的 post 请求的确认
然后使用 transform 根据需要更改 ${body}
<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<transform>
<simple>
I got some data
</simple>
</transform>
</route>
以上将发回修改后的响应作为对请求的确认
如果您想回复并保留原始数据以转发到其他路线或商店
然后使用带有 transform
的多播
<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<multicast>
<to uri="aclient://otherClient"/>
<transform>
<simple>
I got some data
</simple>
</transform>
</multicast>
</route>
以上将发送响应作为对请求的确认,并将原始数据转发给其他客户端 (uri="aclient://otherClient")
或者如果你想将修改后的正文发送到uri="aclient://otherClient"然后在转换后发送它。
我有一个骆驼端点,另一个应用程序发送一个 post 请求和一些数据(可能有一些其他路由)
我想处理这些数据,然后 return 返回给应用程序 POST 请求的响应。
这是我的 Camel 上下文目前的样子:
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<restConfiguration component="restlet" bindingMode="json" port="8989" enableCORS="true"/>
<rest path="/finData">
<description>User rest service</description>
<post>
<to uri="direct:update"/>
</post>
</rest>
<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<to uri="aclient://otherClient"/>
</route>
</camelContext>
如何通过 post 请求的响应从路由 sendFinData 发回一些答案?
post 对您的路线的请求收到的响应是路线末端的 ${body} 中的任何内容。
所以在你的路线的尽头,${body} 包含来自
的任何响应<to uri="aclient://otherClient"/>
我不使用 Camel XML 但在 Java 你会这样做:
rest("/finData")
.get()
.route()
.to("direct:sendFindData")
.end();
from("direct:sendFindData")
.to("aclient://otherClient")
.process(exchange -> exchange.getIn().setBody("Hello world"))
.setBody(simple("GoodBye world")) // same thing as line above
.end();
如果您要传回给请求者的数据不是您路由中最后一次 API 调用的响应,您需要将其临时保存在某处 (exchange.properties) 并将其设置回body 稍后,或聚合响应,以便原始数据不会被覆盖。该路由应产生消费者期望的数据。对于正常的休息请求,这应该是字符串类型(如 "GoodBye world")。例如,如果你想 return JSON 确保响应主体是路由末尾的 JSON 字符串。
抱歉,我无法提供帮助XML,但希望这对您有所帮助。
如果您需要发回响应作为对带有自定义数据的 post 请求的确认 然后使用 transform 根据需要更改 ${body}
<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<transform>
<simple>
I got some data
</simple>
</transform>
</route>
以上将发回修改后的响应作为对请求的确认
如果您想回复并保留原始数据以转发到其他路线或商店 然后使用带有 transform
的多播<route id="sendFinData">
<from uri="direct:update"/>
<log message="Got some data: ${body}"/>
<multicast>
<to uri="aclient://otherClient"/>
<transform>
<simple>
I got some data
</simple>
</transform>
</multicast>
</route>
以上将发送响应作为对请求的确认,并将原始数据转发给其他客户端 (uri="aclient://otherClient")
或者如果你想将修改后的正文发送到uri="aclient://otherClient"然后在转换后发送它。