Apache Camel Rest发送请求后的响应

时间:2019-12-11 15:53:15

标签: rest apache-camel camel-rest

我有一个骆驼终结点,另一个应用程序在其中发送带有一些数据的发布请求(也许还有其他路由)

我想处理这些数据,并通过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发送回一些答案?

2 个答案:

答案 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” ,则在转换后将其发送。