Java 在apache camel-spring dsl xml中调用两个toD

Java 在apache camel-spring dsl xml中调用两个toD,java,apache-camel,spring-dsl,Java,Apache Camel,Spring Dsl,我将在RESTDSL xml中创建一个rest服务。在此基础上,我创建了一个路由。对于路由,我将调用我自己的微服务(这是其他项目创建的),以使用toD uri。一旦得到响应,我将从主体中获取值(响应json)。在此之后,我将再次根据响应值调用同一路由中的其他服务(我们在响应中使用一个字段) 我的问题是 如何从第一个服务中的响应中获取值 以及如何在第一个值中设置尊重值的标题 如何呼叫路线中的2个服务。可以调用tod uri两次吗 示例代码 <toD uri=http://localhost

我将在RESTDSL xml中创建一个rest服务。在此基础上,我创建了一个路由。对于路由,我将调用我自己的微服务(这是其他项目创建的),以使用toD uri。一旦得到响应,我将从主体中获取值(响应json)。在此之后,我将再次根据响应值调用同一路由中的其他服务(我们在响应中使用一个字段)

我的问题是

  • 如何从第一个服务中的响应中获取值
  • 以及如何在第一个值中设置尊重值的标题
  • 如何呼叫路线中的2个服务。可以调用tod uri两次吗
  • 示例代码

    <toD uri=http://localhost >
    
    <log message =${body} >
    
    (this response is going to set 2nd service query parameter value )
    
    <toD uri=http://localhost? 1 services response values a>
    
    
    (此响应将设置第二个服务查询参数值)
    
    我不确定是否完全理解您的情况,但以下是我对您的问题的回答:

    1) 您可以使用JsonPath从JSON响应中选择任何值。要在以后使用它,您可能需要将其保存在消息头上

    .setHeader("myHeader", jsonpath("$.your.json.path"))
    
    .setHeader("myHeader", jsonpath("$.your.json.path")) // assume jsonpath result is "world"
    .to("rest:get:hello/{myHeader}") // URI "hello/world" is called
    
    2) 对不起,我不明白这个问题:-)

    3) 是的,您可以制作任意数量的
    .to()
    .toD()

    但是,如果您想调用REST服务并使用驼峰REST组件,则可以从内置URI模板中获益。这意味着您可能不需要
    .toD()

    比如说

    .to("rest:get:hello/{myHeader}")
    
    将插入从上面的JSON响应中提取的值,因为占位符名称在消息头中查找,如果找到,则替换为相应消息头的值

    .setHeader("myHeader", jsonpath("$.your.json.path"))
    
    .setHeader("myHeader", jsonpath("$.your.json.path")) // assume jsonpath result is "world"
    .to("rest:get:hello/{myHeader}") // URI "hello/world" is called
    

    不确定我是否完全理解你的情况,但以下是我对你问题的回答:

    1) 您可以使用JsonPath从JSON响应中选择任何值。要在以后使用它,您可能需要将其保存在消息头上

    .setHeader("myHeader", jsonpath("$.your.json.path"))
    
    .setHeader("myHeader", jsonpath("$.your.json.path")) // assume jsonpath result is "world"
    .to("rest:get:hello/{myHeader}") // URI "hello/world" is called
    
    2) 对不起,我不明白这个问题:-)

    3) 是的,您可以制作任意数量的
    .to()
    .toD()

    但是,如果您想调用REST服务并使用驼峰REST组件,则可以从内置URI模板中获益。这意味着您可能不需要
    .toD()

    比如说

    .to("rest:get:hello/{myHeader}")
    
    将插入从上面的JSON响应中提取的值,因为占位符名称在消息头中查找,如果找到,则替换为相应消息头的值

    .setHeader("myHeader", jsonpath("$.your.json.path"))
    
    .setHeader("myHeader", jsonpath("$.your.json.path")) // assume jsonpath result is "world"
    .to("rest:get:hello/{myHeader}") // URI "hello/world" is called