我有2个基于资源的服务以JSON格式返回数据。
第一个是订单服务,它返回订单详情。这包含orderid和产品列表,包括产品ID及其数量。
另一种是产品服务,它返回产品的产品详细信息(描述,单价),产品的产品作为输入传递给它。
我想使用驼峰路线合并这两项服务,以便路线响应将是订单详细信息以及订单中每种产品的产品详细信息(描述,单价,数量,数量*单价)。
由于两个服务分别返回JSON,因此不确定如何将它们组合在一起以返回最终结果。
我认为我必须将每个服务的JSON响应转换为java对象,然后根据需要使用POJO计算细节,然后最终将响应转换回JSON并返回结果。
但是,不确定这是否是使用camel的正确方法,或者是否有办法直接使用单独的JSON响应并将它们组合并返回响应。
有人可以帮我解决这个问题吗。
答案 0 :(得分:0)
您应该使用克劳斯建议的content-enrich模式,然后将来自产品服务的响应与订单服务的响应正文进行汇总。
from("direct:in")
.to("http://order.service:8080")
.enrich(simple("http:product.service/?productIds=${header.productIds}"), new OrderProductAggregationStrategy());
答案 1 :(得分:-1)
你不能简单地拥有两条路线吗?
路由1:调用订单服务并将响应发送到处理器并提取产品ID并将其保存在某处的标题中。
路线2:使用您从上一条路线获得的标题中的产品ID调用产品服务。此处的响应为您提供了路线2中收到的每个产品ID的产品详细信息。