Spring WebClient 无法从 REST API 读取数据

2024-03-30

在我的 Spring Boot 应用程序中,我想使用 Spring WebClient 从以下 API 读取数据,如下所示(我之前没有经验,在对许多页面和文章进行多次搜索后,我决定使用 Spring WebClient):

端点 URL 是:

service:

private static final String BASE_URL = "https://demo-api/v1";
private WebClient webClient = WebClient.create(BASE_URL);

public Mono fetchMergedData(String city) {
    Mono<EduData> edu = getEduData(city);
    Mono<GeoData> geo = getGeoData(city);

    return Mono.zip(edu, geo, MergedData::new);
}

public Mono<EduData> getEduData(String city) {
    return webClient.get()
            .uri("/edu/{city}", city)
            .retrieve()
            .bodyToMono(EduData.class);
}

public Mono<GeoData> getGeoData(String city) {
    return webClient.get()
            .uri("/geo/{city}", city)
            .retrieve()
            .bodyToMono(GeoData.class);
}

以下是型号:

models:

@Getter
public class EduData {

    private int institution;
}

@Getter
public class GeoData {

    private int population;
}

@Getter
public class MergedData {

    private int institution;
    private int population;

    public MergedData(EduData edu, GeoData geo) {
        this.institution = edu.getInstitution();
        this.population = get.getPopulation();
    }
}

虽然当我使用 Postman 测试时没有错误并且所有端点都返回数据,但我在两个端点中都看不到任何数据edu, geo变量,也不是返回fetchMergedData()方法。那么,问题出在哪里呢?


要从 Mono 中获取数据,您可以block()(将其变成阻塞操作),或者subscribe()并传递给它一个Consumer or Subscriber.

简单地阻止调用就会给你结果,但如果你想以反应方式执行此操作,那么你需要订阅 Mono。

// Using a block
this.institution = edu.getInstitution().block();

// Using a subscription, when available, EduData can be accessed via response.get
AtomicReference<EduData> response = new AtomicReference<>();
edu.getInstitution().subscribe(response::set);

这是一个简单的订阅,提供了Consumer.

public class SomeClass {
  EduData eduData;

  public void setEduData(EduData eduData) {
    this.eduData = eduData;
  }

  public void fetchData(String city) {
    webClient.get()
        .uri("/edu/{city}", city)
        .retrieve()
        .bodyToMono(EduData.class).subscribe(this::setEduData);
  }
}

当响应可用时,setEduData方法将被调用并返回结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring WebClient 无法从 REST API 读取数据 的相关文章

  • Spring安全+LocaleResolver

    我需要在身份验证成功后更改区域设置 区域设置解析器
  • 检查从 arrayadapter 获取的复选框

    我有标题清单 CheckBox 我想控制默认检查哪一个 所以我试图获得正确的视图并检查它 但由于某种原因它不起作用 知道为什么吗 form checkbox item xml
  • 使用 JavaScript 与 Web 服务器通信的 Applet 是否可以迁移到 JWS?

    只是分享一些信息 希望对社区有用 由于各种浏览器停止支持插件 Applet 的可用性已经下降 Google 已决定停止对 NPAPI 插件的支持 EDGE 不支持插件 Firefox 也不鼓励使用插件 Mozilla 可能会跟进该套件 我们
  • 卡夫卡监听器中的钩子

    kafka 监听消息之前 之后是否有任何类型的钩子可用 使用案例 必须设置MDC关联id才能进行日志溯源 我在寻找什么 之前 之后回调方法 以便可以在进入时设置 MDC 关联 ID 并最终在退出时清除 MDC 编辑后的场景 我将关联 id
  • AMQP Spring 集成错误处理

    我的集成流程如下所示 Bean public IntegrationFlow auditFlow Qualifier eventLoggingConnectionFactory ConnectionFactory connectionFac
  • NIO 直接缓冲区何时以及如何被释放?

    我有一个 C 库 需要一个临时缓冲区作为暂存空间 我正在考虑将直接字节缓冲区的地址传递给它 在最终释放缓冲区之前 是否允许虚拟机重新定位缓冲区 JNI 框架消失后 本机库将保留该指针 我的理解是 JNI 本地对象引用无法缓存 因为 VM 可
  • Java 表达式树 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有相当于 net的 LINQ 下的表达式树JVM 我想实现一些类似 LINQ 的代码结构Scala
  • Java - 调整图像大小而不损失质量

    我有 10 000 张照片需要调整大小 因此我有一个 Java 程序来执行此操作 不幸的是 图像的质量损失很大 而且我无法访问未压缩的图像 import java awt Graphics import java awt AlphaComp
  • JTree ConvertValueToText 返回在更改时被截断

    我有一个自定义树实现convertValueToText 此实现取决于某些全局状态 如果返回的字符串比先前返回的字符串更长 实际上我认为更宽 因为以像素为单位触发它 则文本将被截断并用 填充 当重绘是由 取消 选择元素或某个元素引起时 情况
  • Java 客户端到服务器未知来源

    我有一个简单的乒乓球游戏 需要通过网络工作 服务器将创建一个带有球和 2 个球棒位置的游戏 当客户端连接到服务器时 服务器将创建一个名为 PongPlayerThread 的新类 它将处理客户端到服务器的输入和输出流 我的服务器工作100
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 在 java 8 下使用泛型出现类型错误,但在 java 7 下则不然

    我有一段代码可以在 java 7 下编译良好 但不能在 java 8 下编译 这是一个独立的重现示例 我已经采用了显示此问题的真实代码并删除了所有实现 import java util Iterator class ASTNode
  • Log4j 2.0 中发现 ClassNotFoundException

    我已经设置了 log4j12 api beta2 jar 的构建路径 但它给出了 以下错误请帮我解决这个问题我的代码如下 java 文件 package com sst log4j class Product private int pro
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • Volley 在第一次调用方法时返回 null

    我正在尝试使用 volley 从服务器检索数据 但是当我第一次调用此方法时 我收到服务器的响应 但该方法返回 null 如果我第二次调用它 我会得到最后的响应 public String retrieveDataFromServer Str

随机推荐

  • CXF 客户端安全

    我正在创建 Java Soap Web 服务的客户端 但无法弄清楚如何正确传递密码 这是我的 硬编码 密码示例 Test public void exploratorySecurityTest String username user St
  • WebClient Unicode - 哪种 UTF8?

    当我创建 WebClient 来使用一些 RESTful xml 时 我可以通过两种方式指定 unicode 编码 WebClient wc new WebClient wc Encoding Encoding UTF8 wc Encodi
  • 使用 CloudFront 部署在 S3 上的 VueJS 应用程序“指定的密钥不存在”

    我已经使用 Route53 部署了带有 S3 和 CloudFront 的 VueJS 应用程序 看起来一切都很顺利 我可以访问该网站https my domain com 我可以导航到我使用 Vue 路由器设置的不同路线 但是 当我尝试访
  • 在 Ionic 2 中使用图像资源的正确方法

    Ionic 2 中图像资源的最佳实践是什么 我有一堆 SVG 想用作非系统图标 我发现了一些关于使用 Gulp 的旧技巧 但似乎 Ionic 团队已决定将 Rollup 作为首选构建工具 到目前为止还没有相关文档 有人告诉我只需将它们添加到
  • 有没有办法通过 QueryDSL 中的 Predicate API 急切地获取惰性关系?

    我正在使用QueryDslPredicateExecutor来自 Spring Data JPA 项目 我面临着急于获取惰性关系的需要 我知道我可以在 Repository 接口中使用本机 JPA QL 查询 甚至可以使用 Query DS
  • 如何使用恢复按钮进入上一个活动?

    我的应用程序工作正常 但我的目的是当我关闭应用程序然后再次运行它时 我的应用程序将在最后一个活动中打开 我希望当我再次打开时 主要活动会显示出来 如果我单击 恢复 则最后一个活动将打开 所以我有4个Activity called Main
  • 内存警告后在 iOS 上运行 OpenGL 崩溃

    我遇到了带有 OpenGL 组件的应用程序在 iPad 上崩溃的问题 该应用程序抛出内存警告并崩溃 但它似乎没有使用那么多内存 我错过了什么吗 该应用程序基于 Vuforia 增强现实系统 大量借鉴了 ImageTargets 示例 我需要
  • 为什么将函数转换为除返回类型之外相同的函数类型会失败? [复制]

    这个问题在这里已经有答案了 可能的重复 返回类型是函数签名的一部分吗 https stackoverflow com questions 290038 is the return type part of the function sign
  • onSelectRow 中的 jqGrid 行对象

    如何获取 jqGrid 中选定行上的行对象 我需要实际的对象 而不是单元格值 我已阅读文档 但找不到可以为我提供行对象的方法 由于我使用自定义格式化程序 因此 cellValue 将不起作用 如果你实施自定义格式化程序 http www t
  • 阶乘递归

    我正在尝试编写一种算法来使用递归函数计算数字的阶乘 这是我的代码 include
  • 如果我们不注销 BroadcastReceiver 会发生什么?

    假设我动态注册一个广播接收器这是一个内部类Activity in onCreate 并且不要在代码中的任何地方取消注册它 现在假设finish 被调用 一段时间后 应用程序再次打开 会使用新的接收者对象吗 考虑到具有相同意图过滤器的旧接收器
  • PEP 412 是否会使 __slots__ 变得多余?

    PEP 412 http www python org dev peps pep 0412 在 Python 3 3 中实现 引入了对属性字典的改进处理 有效减少了类实例的内存占用 slots http docs python org 3
  • Python PyPDF2 合并旋转页面

    我正在使用Python报告实验室 https bitbucket org rptlab reportlab canvas 生成带有水印的覆盖文档 将其合并到源 pdf 文档中 带有PyPDF2 https github com mstamy
  • 使用 iTextSharp 实现 PDF 中的图像透明度

    我有一个传入的 jpg 文件 我可以将其颜色设置为透明 当我将图像添加到另一个图像时 效果非常好 我正在尝试使用 iTextSharp 将相同的图像添加到 PDF 但我无法使透明度发挥作用 我尝试了两种方法 但都不起作用 第一种方法是在位图
  • 两个 Android 应用程序如何相互通信?

    两个 Android 应用程序的一般通信架构是什么 Case 1 我有两个Android应用程序 a 一个是服务器 等待客户端请求 处理请求 从某些 sqlite 数据库读取数据 并将结果返回给客户端 该服务器应用程序在其自己独立的 And
  • 是否可以通过 iOS SDK 在 Facebook 请求对话框中显示所有好友?

    我正在使用 Facebook iOS SDK v3 17 我希望允许用户邀请多个朋友到我的应用程序 而不使用可邀请的朋友 API 我没有 Canvas 应用程序 想知道是否真的可以在多好友选择器中看到用户的所有好友 我的代码是 FBWebD
  • 重命名 CloudFormation 模板中的资源

    您可以重命名 CloudFormation 模板中的资源吗 假设我创建了一个堆栈模板来创建单个 lambda 函数 GetTheFunnyPhraseText Type AWS Serverless Function Properties
  • 如何在纯 Ruby 中使用 Capybara(没有 Rails)?

    我正在尝试让 Capybara 在一个简单的 Ruby 脚本中运行 即没有 在 Rails 之外 这是脚本 require rubygems require capybara require capybara dsl include Cap
  • Python子进程:如何三次使用管道? [复制]

    这个问题在这里已经有答案了 我想在以下行中使用子进程 convert loxie orig png bmp mkbitmap f 2 s 2 t 0 48 potrace t 5 progress s o DSC00232 svg 我发现感
  • Spring WebClient 无法从 REST API 读取数据

    在我的 Spring Boot 应用程序中 我想使用 Spring WebClient 从以下 API 读取数据 如下所示 我之前没有经验 在对许多页面和文章进行多次搜索后 我决定使用 Spring WebClient 端点 URL 是 s