Spring Webflux webclient 出现问题,尝试发送 post 请求时没有任何反应

2024-03-13

webclient 的实现如下:

    public <T> WebClient.ResponseSpec sendRequest(HttpMethod method, String contentType, T body, String baseUrl, String path) {
    try {
        WebClient webClient = WebClient.builder().baseUrl(baseUrl).filter(logRequest()).build();
        WebClient.ResponseSpec responseSpec = webClient.method(method)
                .uri(path)
                .header(HttpHeaders.CONTENT_TYPE, contentType)
                .body(BodyInserters.fromObject(body))
                .retrieve();
        return responseSpec;
    } catch (Exception e) {
        throw new WebClientProcessingException("Exception when trying to execute request", e);

    }
}

// This method returns filter function which will log request data
private static ExchangeFilterFunction logRequest() {
    return ExchangeFilterFunction.ofRequestProcessor(clientRequest -> {
        LOGGER.info("Request: {} {} {}", clientRequest.method(), clientRequest.url(), clientRequest.body());
        clientRequest.headers().forEach((name, values) -> values.forEach(value -> LOGGER.info("{}={}", name, value)));
        return Mono.just(clientRequest);
    });
}

还有以下代码,创建用户对象和包含用户对象的命令,然后调用webclient发送请求

@Autowired
private BaseWebClient baseWebClient;
@Override
public void saveOrUpdateUser() {
        UserPayload userPayload = new UserPayload();
        userPayload.setUserId(111L);
        userPayload.setCreatedAt(ZonedDateTime.now(DateTimeProps.systemTimeZone));
        UserCommand userCommand = new UserCommand();
        userCommand.setUser(userPayload);
        baseWebClient.sendRequest(HttpMethod.POST, "application/json",
            Stream.of(userCommand).collect(Collectors.toList()),
            "http://localhost:8080",
            "/users").onStatus(HttpStatus::isError, clientResponse -> {
        throw new WebClientUserSaveOrUpdateeFailedException("Exception when trying to update user state")
        .bodyToMono(String.class);
    });
}

用户有效负载:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserPayload {
  Long userId;
  ZonedDateTime createdAt;
}

用户命令:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCommand {
     @JsonProperty("user")
     UserPayload user;
}

Json 正在等待我的其他应用程序(我正在向其发送请求):

[
  { "user":
            { 
              "userId": 1,
              "createdAt": "2019-05-16T08:24:46.412Z"
            } 
  }
]

使用:Spring boot 2、Lombok(用于 getter/setter)、gradle 当我尝试发送请求时没有任何反应。甚至也不例外。 我尝试过非常简单的案例以及同样的问题。 还有一点需要注意的是,是否可以记录正文?我的意思是以某种方式看到最终的 json 我想我错过了一些一般性的东西。


在反应堆中,在您订阅之前不会发生任何事情 https://projectreactor.io/docs/core/release/reference/#reactive.subscribe. retrive()并没有真正启动请求。正如你在example https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.RequestHeadersSpec.html#retrieve--,您应该使用其中一种方法将 ResponseSpec 转换为发布者,然后最终订阅该发布者。

根据您使用此方法的方式,您也许可以让 Spring 订阅发布者。 WebFlux 支持模型中的反应类型,这意味着您可以直接返回一个Mono https://www.baeldung.com/spring-webflux例如,从您的 RestController 方法。

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

Spring Webflux webclient 出现问题,尝试发送 post 请求时没有任何反应 的相关文章

  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在 Bash 中监控 tomcat,直到它完成部署 war 或应用程序

    怎么可能Tomcat在 bash 脚本中进行监控以检测它是否完成了战争或应用程序的部署 应用场景 Tomcat 开始于systemd Tomcat 开始于catalina sh 使用 Tomcat 管理器 Tomcat从Eclipse启动
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 非 Spring 托管类中 DI 的编译时编织

    我想为标记为的类配置编译时编织 Configurable注释能够将 spring 依赖项注入到初始化的类中new操作员 我不想使用加载时编织 因为我无权访问应用程序服务器的运行脚本 因此无法修改它 另外 我希望能够在测试中使用此类 我的意思
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java

随机推荐

  • 使图像空白透明,覆盖到 imshow()

    我有一个用 imshow 显示的空间数据图 我需要能够覆盖产生数据的晶格 我有一个PNG 作为黑白图像加载的晶格文件 我想要的该图像的部分 覆盖是黑线 它们是晶格 看不到线之间的白色背景 我想我需要将每个背景 白色 像素的 Alpha 设置
  • 如何简化复杂的多边形?

    最近我一直在思考如何将复杂的多边形转换为非复杂的多边形 这是怎么做到的 这就是我想做的事情 完成后我将使用 JavaScript 但任何形式的解决方案都可以 语言 算法或简单的英语 我将使用与手动绘制多边形时相同的启发式 这可能不是计算该多
  • 基本动画 HTML 和 CSS

    所以我只是一个初学者 我只是想弄清楚动画及其工作原理 我的计划是在一条直线上以无限度数 比方说 90 度 无限地移动球 以下是我想知道的几个问题 有没有更好的方法来使用具有共同规则和略有不同规则 具有不同旋转 的类 如何让球在具有不同旋转的
  • 检查变量是否是液体中的字符串或数组类型

    在 Jekyll 中你可以使用液体模板 https shopify github io liquid 我正在尝试编写一个包含网站中所有链接的导航 sitemap home demo right right left left 我想要实现的是
  • Google 地图片段在片段内返回 null

    所以我有一个包含地图片段的空片段 每当我尝试激活包含地图的片段时 我的应用程序都会崩溃并在这一行返回空指针错误 map MapFragment getFragmentManager findFragmentById R id map get
  • 在plsql中检查用户密码是否有效

    我需要检查数据库用户是否有效 我将允许用户使用以下方式更改密码ALTER命令 但在执行此操作之前 我想验证他们当前的密码 以确保他们的身份与他们所说的一致 是否可以在 pl sql 内部获取用户 密码组合并检查其是否有效 我认为 Oracl
  • Maven:存储库ID的含义

    在我的 POM 文件中 我指定了两个存储库
  • JavaFX MediaPlayer:MP4 不会在 Windows 7 上循环

    我创建了一个基本的 JavaFX 媒体播放器 在我的 Windows 10 操作系统上 一切正常 并且完全按照预期运行 private MediaPlayer initializeMediaPlayer Media media new Me
  • 在elasticsearch中,有没有办法显示文档中的哪个字段是“命中”?

    当使用elasticsearch搜索一些文档时 我想看看文档中的哪个字段是 命中 将其标记为搜索结果 是否有本地方法可以执行此操作 或者我需要在搜索客户端中执行此操作 E g GET events search q nottingham 给
  • git update-index --skip-worktree 是否会影响上游存储库?

    我自己已经使用 git 一段时间了 现在正在为我们的团队建立一个存储库 我们开发一个电子商务平台 有一些目录和文件需要忽略 例如上传目录和环境特定的配置文件 虽然配置文件位于 gitignore 上 但我想使用以下任一方法忽略上传目录 sk
  • 亚马逊 EC2 实例

    我已经使用命令行工具设置了亚马逊 EC2 实例 我已经为其创建了密钥对等 并且它已启动并正在运行 我尝试使用以下命令通过 SSH 连接到它 我在 Snow Leopard 中运行 bash ssh i ec2 keypair email p
  • 排除方法maven

    我试图将 PIT 排除在改变 I O 方法之外 例如 close 和 flush 这是我的 Maven 配置
  • 构造对象时出现“无法将参数从 '[classname](_cdecl *)(void)' 转换为 '[classname]'”错误

    注意 我使用的是 Visual Studio 2010 这里有两个重要的类 Date 和 Directory class Date private int month day year public Date Date int month
  • 如果 Google 电子表格中的单元格值为 0 或空白,则删除该行

    如果该行中的 C 列输入的值为 0 或空白 我希望能够删除 Google 电子表格中的整行 我可以编写一个简单的脚本来完成此任务吗 谢谢 我可以建议一个不使用脚本的简单解决方案 假设您要删除 C 列中包含空文本的行 对工作表中的 C 列数据
  • 带快速拨号功能的颤动浮动操作按钮

    是否有任何现成的小部件或从哪里开始带有快速拨号操作的浮动操作按钮 https material io guidelines components buttons floating action button html buttons flo
  • 使用 PHP 设置百分比格式

    我想将 0 45 格式化为 45 我知道我可以做类似的事情FLOOR x 100 但想知道是否有更好的方法 更好的定义是更标准 不一定更快 一种想法是http php net manual en class numberformatter
  • 如何在markdown中插入来自url的图像

    将图像插入 Markdown 文件的方法是 并且它在 外部 r
  • 如何在 Shiny 中重置 fileInput 的值?

    关于此事已经有类似的帖子 例如如何更新闪亮的 fileInput 对象 https stackoverflow com questions 17352086 how can i update a shiny fileinput object
  • 如何在 angular2 中使用子域进行路由?

    我希望创建一个具有不同用户登陆页面的 Angular 2 应用程序 例如 user1 example domain com 和 user2 example domain com 将具有不同且不相关的 主页 我的问题 我怎样才能使用 Angu
  • Spring Webflux webclient 出现问题,尝试发送 post 请求时没有任何反应

    webclient 的实现如下 public