【发布时间】:2020-04-07 03:29:15
【问题描述】:
我想构建一个数据聚合器,它调用多个服务并从它们的响应中提取一些属性,然后构建聚合对象。
请考虑以下示例:
要获取订单详情,我需要调用 OrderService 的 GetOrderDetails API,它会返回以下输出(简化版):
{
statusCode: OK,
orderDetails: {
orderId: "order_id",
offer: {
offerId: "offer_id",
offerType: "offer_type"
},
address: {
addressId: "address_id",
houseNo: "house_no",
city: "city",
state: "state"
}
}
}
同样,我需要调用其他服务。
问题
我需要通过从这些服务的响应中挑选属性来构建输出对象无需通过相关属性的获取器对逻辑进行硬编码。
我计划将所需属性的列表及其各自的路径存储为配置,然后提取逻辑将是通用的。
好吧,配置看起来像:
output_attribute: dotted_hierarchy_path
orderId:orderDetails.orderId
addressId:orderDetails.address.addressId
所以,我的输出对象将是:
{
orderId: <order_id>,
addressId: <address_id>
}
如果我有这种配置,我的 java 代码将是通用的,即它可以从任何对象中挑选任何属性。
要提取所需的属性,我的想法是遍历虚线路径并通过Java反射获取值。但是 Java 反射很慢。
这是一个实际的世界问题,因此希望人们提出他们有价值的方法。
【问题讨论】:
-
@Turing85:我已经通过配置提出了解决问题的方法,该配置通过虚线路径和 Java 反射存储层次结构。如果有人有,这里的要求是提出更好的方法。
-
@Turing85:这是一个实际的世界问题,可以有多种方法,所以想和stackoverflow社区讨论。谢谢。
-
@Turing85:完成。
-
谢谢 :) 我的 cmets 很快就会自毁。
标签: java aggregation soa