登录
首页 >  文章 >  java教程

Spring 5 WebFlux 中 doPostAndSaveList 方法返回 null 的问题:如何正确处理 WebClient 响应并返回 JSONArray?

时间:2024-12-09 21:12:52 259浏览 收藏

从现在开始,努力学习吧!本文《Spring 5 WebFlux 中 doPostAndSaveList 方法返回 null 的问题:如何正确处理 WebClient 响应并返回 JSONArray?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

Spring 5 WebFlux 中 doPostAndSaveList 方法返回 null 的问题:如何正确处理 WebClient 响应并返回 JSONArray?

spring 5 webflux 中 dopostandsavelist 方法返回数据的问题

代码中,dopostandsavelist 方法被定义为返回 mono,但实际返回的却是 null。这是因为方法中对 webclient 的响应进行了订阅,而订阅操作并不会返回数据。

解决方法

要让 dopostandsavelist 方法返回请求回来的 flatmap 中的 jsonarray,可以采用以下方法:

  1. 将 string groupsstr 声明块移动到 log.info("进入dopost方法"); 语句下方。
  2. 将响应的处理代码放入 map 操作符中,并用 return mono.just(jsonobjectjsonarray); 替换 log.info("groupsstr:{}") 语句。
  3. 将 if 判断块改写为 if (jsonobjectjsonarray == null),并用 return mono.empty(); 替换 return null; 语句。
  4. 删除 subscribe(); 语句。

修改后的代码如下:

public Mono doPostAndSaveList(String token, Map bodyMap) {
    log.info("进入doPost方法");
    return WebClient.create(baseUrl)
            .post()
            .uri(uriBuilder -> uriBuilder.path(uri)
                    .queryParam("access_token", token)
                    .build())
            .bodyValue(bodyMap)
            .retrieve()
            .bodyToMono(JSONObject.class)
            .subscribeOn(Schedulers.elastic())
            .flatMap(jsonObject -> {
                JSONArray groupsStr = jsonObject.getJSONArray("group_chat_list");
                log.info("groupsStr: {}", groupsStr);
                if (groupsStr == null) {
                    return Mono.empty();
                } else {
                    return Mono.just(groupsStr);
                }
            });
}

今天关于《Spring 5 WebFlux 中 doPostAndSaveList 方法返回 null 的问题:如何正确处理 WebClient 响应并返回 JSONArray?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>