我正在使用 apache Camel 4.3.0 和 spring boot 3.2.1 和 java 17。我有一个路由(rest dsl),它接受 xml 并调用 bean 处理器方法,然后进行数据库调用并返回数据 200 OK .
根据 apache Camel 关于 bean 绑定的文档,默认情况下,bean 方法的返回值在出站消息正文中设置。但它也指出,当 bean 方法具有 Exchange 类型的单个方法参数时,其返回类型必须为 void。
@Autowired
DataProcessor dataProcessorBean;
//Rest Route Builder
rest("/api/retrieveWrapper/")
.id("retrieveWrapper")
.post("/getData")
.to("direct:getDataWrapperFromDb");
from("direct:getDataWrapperFromDb")
.routeId("getDataWrapper")
.bean(dataProcessorBean, "getWrapper")
.log("Successfully retrieved data, Size is : ${body.size()}')")
.end()
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_OK));
//DataProcessor.java
@Component
public class DataProcessor{
@Autowired
DataWrapperDao dao;
/*Return type is not void as instructed by camel documentation but has single exchange parameter*/
public List<Wrapper> getWrapper(Exchange exchange) throws Exception /
{
List<Wrapper> dataList = dao.getDataWrapper();//Get data from database
return dataList;
}
}
但是我上面的代码仍然可以工作,并将列表响应设置为交换的主体,即使方法返回类型不是 void 并且它具有 Exchange 类型的单个参数。我可以成功地将 bean 方法(包含列表)返回的主体的大小记录回路由中。 为什么此行为与文档不同?
是的,这是一些古老的要求,但对于今天的现代骆驼来说已经不再是这样了。所以我们可以从文档中删除它。