我有一个采用供应商并返回对象摘要版本的方法。我想从Camel RestDefinition调用它,但是我一直无法弄清楚正确的语法(或者是否可以做到)。我对返回汇总对象的其他方式持开放态度,但如果它们需要其他库,则不会。
可能最容易在代码中显示我尝试过的内容。
我正在使用的方法是:
public List<Event> getEventsByCollector(String collectorID) {
// get and return the events for the given collector
}
public List<EventSummary> getEventSummary(Supplier<List<Event>> eventSupplier) {
return eventSupplier.get().stream().map(EventSummary::new).collect(Collectors.toList());
}
我们正在使用Camel Java dsl定义REST服务,如下所示:
rest("/collectors")
.get("/{collectorID}/events/summary")
.produces(MediaType.APPLICATION_JSON)
.param().name("collectorID").type(RestParamType.path).dataType("String").description("ID of the collector").endParam()
我正在尝试找出最后的那个“ to”。如果我只返回完整的事件,那将很容易,并且看起来像这样:
.to("bean:eventService?method=getEventsByCollector(${header.collectorID})")
但是,我想将上述方法作为Supplier
传递给getEventSummary
。我一直找不到有关此的任何文档,所以我不确定。可以做到吗?如果是这样,怎么办?如果没有,获取我想要的事件摘要的最佳方法是什么?
我尝试过
.to("bean:eventService?method=getEventSummary(bean:eventService?method=getEventsByCollector(${header.collectorID}))")
但是调用Supplier
时getEventSummary
为空。
我还尝试使用dsl将getEventSummary
改为使用List<Event>
而不是Supplier
:
.to("bean:eventService?method=getEventsByCollector(${header.collectorId})")
.to("bean:eventService?method=getEventSummary(${body}))"
但是这似乎跳过了对getEventsByCollector
的呼叫,而没有任何选择直接进入getEventSummary
。基于这一事实,我在这两种方法的开头都设置了断点,并且仅击中getEventSummary
。
我需要一个List<EventSummary>
。我能够想到解决此问题的唯一其他方法是制作类似getEventSummaryByCollectorID
的东西,但是如果我们需要所有事件的摘要或以不同方式提取的事件,则必须有另一种方法实际上是一样的,所以我宁愿避免这种情况。