我有一个骆驼终结点,另一个应用程序在其中发送带有一些数据的发布请求(也许还有其他路由)
我想处理这些数据,并通过POST请求的响应将某些内容返回给应用程序。
这是我目前的驼峰语境:
<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>
如何通过发帖请求的响应从路由sendFinData发送回一些答案?
答案 0 :(得分:2)
发布到您的路线的请求的响应就是路线末尾$ {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),然后再将其设置回正文,或汇总响应,以便原始数据不会被覆盖。该路线应产生消费者期望的数据。对于正常的休息请求,它应该是String类型(例如“ GoodBye world”)。例如,如果要返回JSON,请确保响应主体是路由末尾的JSON字符串。
很抱歉,我无法提供XML方面的帮助,但希望对您有所帮助。
答案 1 :(得分:0)
如果您需要使用自定义数据将回复作为对回执请求的确认发回 然后使用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>
以上将发送响应作为确认请求,还将原始数据转发给otherClient( uri =“ aclient:// otherClient” )
或者如果要将修改后的正文发送到 uri =“ aclient:// otherClient” ,则在转换后将其发送。