我很好奇如何在 Apache Camel 中管理 HTTP REST 请求?
我需要遍历 ID 列表并将列表中的特定 ID 放入 HTTP GET 请求中。我将从数据库中收到此列表。我需要向第三方服务器发送请求并管理响应 - 将其插入数据库。
如何在循环内的请求中计划 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);
}
}