首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过循环在spring-webflux中设置WebClient中的不同主体?

如何通过循环在spring-webflux中设置WebClient中的不同主体?
EN

Stack Overflow用户
提问于 2020-09-23 15:35:40
回答 1查看 198关注 0票数 0

我使用的是spring-webflux,无法设置循环生成的不同主体

代码语言:javascript
复制
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")));
}

我需要在此方法之前创建一个循环,并生成一个不同的主体(数据),然后将生成的响应保存在一个列表中,并返回一个响应列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-28 01:53:39

在这个方法之前,我创建了一个递归方法。它生成并发出对webClient方法(getUsersAndInstrumentOrders)的输入(pageNo)。生成页码,直到源ApiServive不返回响应。

代码语言:javascript
复制
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);
                }
            });
}

我将数据输入体更改为固定数据和相对页码,以移动下一页

代码语言:javascript
复制
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")));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64023139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档