我很好奇如何在Apache Camel中管理HTTP REST请求?
我需要遍历ID列表,并将列表中的特定ID放入HTTP GET请求中。我将从数据库接收此列表。我需要将请求发送到第三方服务器并管理响应-将其插入到DB中。
如何在循环内的请求中规划ID参数?
@Component
public class EgrRegistryNumbersRoute
extends RouteBuilder {
private final JacksonDataFormat format = new ListJacksonDataFormat(NumbersDTO.class);
@Autowired
DataSource dataSource;
List myList = List.of(1, 2, 3, 4, 5);
@Override
public void configure() throws Exception {
from("timer://foo?repeatCount=1")
.noAutoStartup()
.setHeader(Exchange.HTTP_METHOD, constant("GET"))
.to("http://server/api/v2/getRegNumByState/**{HERE I WANT VALUE FROM THE LIST}**")
.unmarshal(format)
.routeId("NumbersRoute-route")
.log(">>>${body}")
.process(new InsertProcessor("table_name", "column"))
.to("jdbc:dataSource");
}
}
处理器:
public class InsertProcessor
implements Processor {
private final String tableName;
private final String columns;
public InsertProcessor(String tableName, String columns) {
this.tableName = tableName;
this.columns = columns;
}
@Override
public void process(Exchange exchange) throws Exception {
List<NumbersDTO> inputList = exchange.getIn().getBody(List.class);
StringBuilder queryBuilder = new StringBuilder("INSERT INTO " + tableName + "(" + columns + ") values ");
System.out.println("Input to be persisted : " + inputList);
inputList.forEach(v -> {
queryBuilder.append("(").append(v.getNgrn()).append("),");
});
String insertQuery = queryBuilder.toString().replaceFirst(".$","");
System.out.println("Insert Query is : " + insertQuery);
exchange.getIn().setBody(insertQuery);
}
}
1条答案
按热度按时间p8ekf7hl1#
您可以使用split,并在定义您的http产生器端点时将
to
切换为toD
来达成此目的。透过toD
,您可以使用简单的语言搭配URI。如果你不想使用splitter,你也可以使用loop来遍历列表。