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 Security 上的组和 acl

    我想使用 Spring Security 来管理用户 组和权限 我想使用 ACL 来保护我的域对象 但我找不到将组分配给 acl 的方法 例如 我有用户和组 每个组可以拥有以下证券 管理论坛 可以是类似的角色ROLE FORUM MANAG
  • 32 位数字中 1 的数量

    我正在寻找一种在 32 位数字中包含 1 数量的方法 之间不使用循环 任何人都可以帮助我并向我提供代码或算法吗 这样做 提前致谢 See Integer bitCount int http java sun com javase 6 doc
  • 如何将 Excel 中的图表导出为图形

    我有一系列 Excel 电子表格 每个电子表格至少包含一页数据和一页根据数据创建的图表 我需要捕获 不从数据中重新生成 将现有图表作为网络友好图像 这可以通过 Java 或 Net 实现吗 我知道 POI 的东西 Java 不会这样做 或者
  • javax.naming.NameNotFoundException

    我正在 JBoss 5 容器中运行 ejb 示例 我正在使用一个例子从这里开始 第一部分 http www roseindia net jboss jboss 3 2 shtml 在示例中 我在 JBoss 中部署了 bean 并在 Tom
  • 可以显式删除 lambda 的序列化支持

    As 已经知道 https stackoverflow com a 22808112 2711488很容易添加序列化当目标接口尚未继承时支持 lambda 表达式Serializable 就像 TargetInterface Seriali
  • Encog - 如何加载神经网络的训练数据

    The NeuralDataSet我在实际中看到的对象除了 XOR 之外什么都没有 它只是两个小数据数组 我无法从文档中找出任何内容MLDataSet 似乎所有内容都必须立即加载 但是 我想循环遍历训练数据 直到到达 EOF 然后将其算作
  • JUnit 测试方法无法返回值

    为什么 JUnit 测试方法无法返回值 文档 https junit org junit5 docs current user guide writing tests classes and methods说 强调我的 测试方法和生命周期方
  • java.lang.IllegalArgumentException:比较方法违反了其一般契约[重复]

    这个问题在这里已经有答案了 您好 下面是我的比较器的比较方法 我不确定出了什么问题 我在堆栈溢出上查找了其他类似标题的问题和答案 但不确定我的方法出了什么问题 但我不断收到 java lang IllegalArgumentExceptio
  • 当目标是属性时,@Throws 不起作用

    在看的同时这个问题 https stackoverflow com q 47737288 7366707 我注意到申请 Throws to a get or setuse site 没有影响 此外 唯一有效的目标 for Throws ar
  • 如何将 openapi-generator 中的客户端包含在 gradle java 应用程序中?

    我想创建一个 gradle java 应用程序 它从 openAPI 规范文件生成客户端并使用该客户端 所以我创建了一个java应用程序gradle init 类型 应用程序 语言 Java DSL groovy 测试框架 Junit Ju
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在单独的模块中使用 Spring AOP 方面

    我在一个 Maven 项目模块中有一个方面 com x NiceAspect 在一个单独的 Maven 模块中有一个类 com x NiceClass 这些模块具有相同的 POM 父级 共同创建一个项目 我想要实现的目标是拥有一个通用的方面
  • Kotlin 中的枚举类对于 Android 来说是否像 Java 中那样“昂贵”?

    Are EnumKotlin 中的类对于 Android 来说 昂贵 就像 Java 一样 还可以用吗 IntDefs or StringDefs在科特林 当我将 Kotlin Enum 类反编译为 Java 类时 底层仍然使用了 Java
  • 如何在打开导航抽屉时使背景 Activity 变小?

    我想做我的背景Activity打开时稍微小一点Navigation Drawer 模拟存在的效果Airbnb应用 我想最好的解释是截图 但重点不是让 View 变小 而是让它成为与 Drawer 打开 关闭动画同步的动画 因此 如果您开始打
  • 将 try catch finally 块放入另一个 finally 块中

    try catch finally try catch finally 上面的代码好不好 是的 你可以这样做 实际上 在处理想要正确关闭的流时 您甚至需要这样做 InputStream in try catch finally try in
  • android中ScrollView中的图像

    在我的应用程序中 我想放置一个 png 文件 并且希望它在横向和纵向模式下都被视为滚动图像 请建议代码或示例 要使您的 Imageview 在高度不适合时滚动 您可以在 xml 中的 ScrollView 内添加一个 ImageView 并
  • java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException

    我想将 apache cli 添加到我的应用程序中 但我有问题 当我尝试运行它时显示这些错误 Error A JNI error has occurred please check your installation and try aga
  • 配置Spring的MappingJacksonHttpMessageConverter

    我在用MappingJacksonHttpMessageConverter在 Spring MVC 中自动序列化对象 如下所示 RequestMapping value getAccount method RequestMethod GET
  • 如何通过sparkSession向worker提交多个jar?

    我使用的是火花2 2 0 下面是我在 Spark 上使用的 java 代码片段 SparkSession spark SparkSession builder appName MySQL Connection master spark ip
  • JAXB 枚举字段未序列化

    我有以下课程 package dictionary import java io Serializable import java util Objects import javax xml bind annotation XmlEleme

随机推荐

  • 使图像空白透明,覆盖到 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