如何在SpringWebFlux中通过循环设置WebClient中的不同主体?
我使用的是SpringWebFlux,无法设置循环生成的不同实体如何在SpringWebFlux中通过循环设置WebClient中的不同主体?,spring,spring-webflux,Spring,Spring Webflux,我使用的是SpringWebFlux,无法设置循环生成的不同实体 public Mono<String> getUsersAndInstrumentOrders(String serviceAddress, String data){ return webClient.method(HttpMethod.POST) .uri(serviceAddress) .accept(MediaType.APPLICATION_JSON)
public Mono<String> getUsersAndInstrumentOrders(String serviceAddress, String data){
return webClient.method(HttpMethod.POST)
.uri(serviceAddress)
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer " + HttpWebClient.token)
.acceptCharset(StandardCharsets.UTF_8)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(data)
.exchange().log()
.flatMap(clientResponse -> {
if (clientResponse.rawStatusCode() == 400 || clientResponse.rawStatusCode() == 401) {
logger.error("Getting users failed. Error response " + clientResponse.rawStatusCode());
return Mono.empty();
} else {
logger.info("Getting users done successfully");
return clientResponse.bodyToMono(String.class);
}
}).retry(Integer.parseInt(properties.getProperty("get-users.number-of-retrying")));
}
公共Mono GetUsers和InstrumentOrders(字符串服务地址、字符串数据){
返回webClient.method(HttpMethod.POST)
.uri(服务地址)
.accept(MediaType.APPLICATION_JSON)
.header(“授权”、“承载人”+HttpWebClient.token)
.acceptCharset(标准字符集.UTF_8)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(数据)
.exchange().log()
.flatMap(客户端响应->{
如果(clientResponse.rawStatusCode()==400 | | clientResponse.rawStatusCode()==401){
logger.error(“获取用户失败。错误响应”+clientResponse.rawStatusCode());
返回Mono.empty();
}否则{
logger.info(“让用户成功完成”);
返回clientResponse.bodytomino(String.class);
}
}).retry(Integer.parseInt(properties.getProperty(“get users.number of retrying”));
}
我需要在此方法之前创建一个循环,并生成一个不同的主体(数据),然后将生成的响应保存在列表中并返回一个响应列表。在此方法之前,我创建了一个递归方法。它生成并向webClient方法(getUsersAndInstrumentOrders)发送输入(pageNo)。生成页码,直到源ApiServive不返回响应
public Mono<List<User>> getUsersFromApi(Integer pageNoStart){
return getUsersAndInstrumentOrders("/api/Report/GetBrokerCustomers",pageNoStart)
.flatMap(str->{
com.google.gson.JsonObject jsObj;
if (str.length()<1){
jsObj=new com.google.gson.JsonObject();
}else {
jsObj = JsonParser.parseString(str).getAsJsonObject();
}
return Mono.just(jsObj);
}).flatMap(jsonObj->{
JsonArray array=jsonObj.getAsJsonArray("resultList");
for (int i=0; i<array.size(); i++){
JsonObject userJsObject= array.get(i).getAsJsonObject();
User user=new User();
user.setUsername(userJsObject.get("nationalId").getAsString());
user.setMobile(userJsObject.get("mobile").getAsString());
user.setIban(userJsObject.get("iban").getAsString());
user.setEnabled(true);
users.add(user);
}
if (array.size()<1) {
return Mono.just(users);
}else {
Integer newPageNo=pageNoStart+1;
return getUsersFromApi(newPageNo);
}
});
}
public Mono getUsersFromApi(整数页面开始){
返回getUsersAndInstrumentOrders(“/api/Report/GetBrokerCustomers”,第页)
.flatMap(str->{
com.google.gson.JsonObject jsObj;
if(str.length(){
JsonArray数组=jsonObj.getAsJsonArray(“结果列表”);
对于(int i=0;i您不能,为什么?生成数据,将其粘贴在通量中,对发出的每个值执行一个webclient调用,然后执行collectList.hi thomas tanks以获取您的答复,但我需要使用此方法生成的数据用于输入法递归方法并返回一个响应集合。不,您没有,因为您没有在问题。如果你想要一个正确的答案,那么请提供一个正确的问题。祝你好运。
public Mono<String> getUsersAndInstrumentOrders(String serviceAddress, Integer pageNo){
logger.info("Get getUsersOrInstrumentOrders From Samat");
return webClient.method(HttpMethod.POST)
.uri(serviceAddress)
.accept(MediaType.APPLICATION_JSON)
.header("Authorization", "Bearer " + HttpWebClient.token)
.acceptCharset(StandardCharsets.UTF_8)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue("{\"reportFilter\":{\"orderStatus\":0},\"optionalFilter\":{\"take\":300,\"page\":"+pageNo.toString()+"}}")
.exchange().log()
.flatMap(clientResponse -> {
if (clientResponse.rawStatusCode() == 400 || clientResponse.rawStatusCode() == 401) {
logger.error("Getting users failed. Error response " + clientResponse.rawStatusCode());
return Mono.empty();
} else {
logger.info("Getting users done successfully");
return clientResponse.bodyToMono(String.class);
}
}).retry(Integer.parseInt(properties.getProperty("get-users.number-of-retrying")));
}