问题标签 [spring-webclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1610 浏览

java - 如何在 java 中使用构造函数基初始化来初始化 WebClient?

我尝试从 WebClient 替换 RestTemplate,因为根据 Java Doc,将不推荐使用 RestTemplate。Spring 团队建议尽可能使用 WebClient。

RestTempalte 之前的代码如下

我想从 WebClient 替换 RestTemplate。所以我实现类 WebClientConnection 如下

我使用这个依赖

webclient创建时出现stackOverflow错误

如何正确执行从 RestTemplate 到 WebClient 的迁移?

0 投票
0 回答
192 浏览

java - 如何使用 Spring WebClient 启用 cookie 持久性

我需要使用 Spring 的响应式 WebClient 测试登录流程。我的登录流程在一系列重定向期间设置了 cookie,这使得手动跟踪 cookie 变得很麻烦。WebClient 或其任何连接器是否支持 cookie?我已经使用 Java 创建了一个 ExchangeFilterFunction java.net.CookieManager,但它的行为方式仍然与通过 Apache HttpClient 配置了 cookie 支持的 RestTemplate 不同。有没有更好的方法,其他写我自己的cookie持久性?

0 投票
0 回答
73 浏览

java - 如何在 Spring webflux 层次结构中发布数据?

我正在使用 spring webflux 开发一个代理应用程序。客户端发送请求以获取前 100 条记录。服务器 1(Spring webflux 项目)向服务器 2 发送请求,并获取前 100 条记录(Flux<MyData>)然后对其应用过滤器(拒绝一些数据),现在服务器 1 的记录少于 100 条,所以它必须发送另一个请求准确地获取 100 条正确记录。但是我不能用 Spring webflux 动态地做到这一点。如何动态收集 100 条记录?

注意:我有fetchData通过 WebClient 发送请求的方法,以便max从记录中获取first记录。

0 投票
4 回答
21414 浏览

java - spring webclient:在特定错误上使用退避重试

当响应为 5xx 时,我想在等待 10 秒后重试请求 3 次。但我没有看到可以使用的方法。在对象上

我可以看到方法:

在有重试计数但没有延迟的条件下重试

使用退避和次数重试,但没有条件

还有一个retryWhen但是不知道怎么用

0 投票
2 回答
2090 浏览

json - 是否有用于 Camunda Rest 响应的 Java 类?

我目前正在尝试使用 camunda rest api 设置从 Spring 到我本地 camunda 实例的 REST 调用。

这是我的设置方式:

  1. localhost:8080在我这样的地方启动了一个本地 camunda docker 容器: https ://hub.docker.com/r/camunda/camunda-bpm-platform (我已经用邮递员测试了电话,他们正在工作)

  2. 使用我的几个 camunda 和 rest 依赖项构建了一个 maven 项目pom.xml

  1. 编写了一个简单的服务来从 Spring 进行休息调用(取自https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-webclient):

所以我基本上使用 Spring WebClient 进行休息调用,localhost:8080/engine-rest/deployment/它应该给我一个 JSON 格式的所有进程列表(根据https://docs.camunda.org/manual/latest/reference/rest/deployment/get-query/)。

现在,当我将响应直接转换为 ProcessDefinitionEntity[] 时,它不会将 JSON 转换为它。我还尝试了来自 camunda Java API ( https://docs.camunda.org/javadoc/camunda-bpm-platform/7.11/ ) 的其他类,例如ProcessDefinitionDto

似乎没有一个课程适合我从 camunda 得到的回应。响应如下所示:

(这只是 docker 容器中的两个标准进程)

camunda java api 中是否有正确匹配来自 camunda rest api 的响应的类?

PS:我从 maven 依赖项(位于package org.camunda.bpm.engine.rest.dto.repository.ProcessDefinitionDto)中获得的 ProcessDefinitionDto 看起来像这样:

我从邮递员电话中得到的响应http://localhost:8080/engine-rest/process-definition如下所示:

0 投票
1 回答
350 浏览

java - 在配置 Spring WebClient 代理时如何更改 DEFAULT_CONNECT_TIMEOUT_MILLIS?

我正在尝试使用代理配置 WebClient 的下一种方式(kotlin):

但是 ProxyHandler.java 中的默认 timout 是 10000 毫秒。我怎样才能改变它?合作伙伴系统长时间响应超过 10 秒,我收到以下异常:

0 投票
2 回答
4514 浏览

spring - 使用 Spring Webflux 和在 Spring 中提供的静态文件恢复文件下载

我相信整个互联网上都没有对此的回答,因为它可能非常复杂,但我会继续问。

基本上,我想在多个 Spring 应用程序之间进行交叉通信。他们每个人都以静态方式提供资源,这是该主题的链接。此服务由其他应用程序实例资本化,这些应用程序实例可以根据请求下载这些文件(现在我正在通过 HTTP 传输文件)。由于Downlolad,我能够下载文件并使用Project Reactor SO问题中的ExchangeFunction从ClientRequest保存文件。

现在我想提升我的代码,以便在连接问题或应用程序在给定的超时时间内暂时不可用的情况下,我能够恢复文件的下载。我在本文中配置了WebClient超时。

现在,我认为这样的代码实际上可以让我处理暂时不可用的服务:

但显然,每当我杀死我的第二个应用程序实例时,我都会收到一大堆错误:

以及稍后在同一个堆栈跟踪中:

异常本身并不是什么大问题,但关键是在我将应用程序重新启动后,我的下载不会恢复。

所以是的,我的问题是,我怎么可能恢复下载以及我应该/可以如何处理这里的异常?

0 投票
0 回答
208 浏览

url - 使用响应式 WebClient 的 SAP OData 调用 - “/”转义

目前我正在使用 OData 服务与 SAP 进行集成开发。我的客户端应用程序基于 JAVA 8 Spring。

问题:

从我的客户端应用程序中,当我使用 spring 响应式 webclient 执行 GET 时 - SAP 无法处理请求。但是当我在 Firefox-REST 客户端中使用相同的 URL 时,我得到了正确的响应。只有当我们在某些 URL 值中有“/”时才会发生这种情况。

这是我的网址。

http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='/ON/CLOUD')/?sap-client=XXX&spnego=disabled

字段 DATA='/ON/CLOUD' 在这里造成了麻烦。(请注意,当我不使用“/”时,一切正常)

我通过手动转义“/”来尝试这个: - 这在 REST 客户端 http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='%2FON %2FCLOUD')/?sap-client=XXX&spnego=disabled

但是当我使用上述 URL 从我的 java 客户端执行 GET 时,SAP 抱怨 URL 格式错误。当我检查 SAP 中的日志时,出于某种原因,我的客户端程序使用以下 URL http://host:port/sap/opu/odata/sap/Service/Set(RUNTYPE= 'TEST',DATA='% 252FON%252FCLOUD')/?sap-client=XXX&spnego=disabled

所以 '%2FON%2FCLOUD' 在 GET 调用中转换为 '%252FON%252FCLOUD'。

我想转义 '%' 并使用我发送的任何 URL。你能帮我在哪里解决这个问题吗?

这是我目前正在使用的代码。

url – 是我的网址

非常感谢你的帮助。

更多信息:

这是 JAVA 客户端的 http 跟踪:

GET sap/opu/odata/sap/Service/Set(RUNTYPE='TEST',DATA='%25F2ON%25F2CLOUD')/?sap-client=XXX&spnego=disabled 用户代理:ReactorNetty/0.7.15.RELEASE 主机:主机名:端口接受编码:gzip 接受:应用程序/json 授权:基本 AuthorizationKey==

我实际上将以下 URL 发送到 Spring WebClient sap/opu/odata/sap/Service/Set(RUNTYPE='TEST',DATA='%2F2ON%2F2CLOUD')/?sap-client=XXX&spnego=disabled

我的春季版本: springBootVersion = '2.0.9.RELEASE'

我的 SAP 版本:SAP FPSL 版本 753

如果您需要更多信息,请告诉我。

0 投票
1 回答
669 浏览

spring-boot - 带有 WebClient 和 OAuth 客户端凭据的 Spring MVC Servlet

我在基于 Spring MVC servlet 的应用程序(非反应式)中使用 WebClient 来通过 HTTP 从其他微服务访问资源。很少有资源受 client_credentials OAuth2 流保护。使用 OAuth2 客户端凭据配置 RestTemplate 非常方便,但现在我无法使用 WebClient 进行相同的配置。我总是可以手动获取 Bearer 令牌,然后在 WebCLientsetBearerAuth()方法中设置它,但这需要大量的手动管道。我的问题是 - 在 Spring MVC 应用程序中使用时,WebClient 是否支持用于自动客户端凭据流的 Exchange 过滤器?

更新: 我发现ServletOAuth2AuthorizedClientExchangeFilterFunction应该解决客户端凭据身份验证流程。我正在使用以下代码:

但现在的问题是,当从计划的作业中调用时,此 WebClient 无法调用远程资源服务器。我收到以下错误:

如果我从 MVC 控制器使用这个 WebClient 而不是预定的作业,事情会正常工作。对此的任何帮助将不胜感激。

0 投票
1 回答
2471 浏览

spring - 如何在重试时重新调用 WebClient 的 ExchangeFilterFunction

当使用反应器的retry(..)操作员WebClient交换过滤器功能时,重试时不会触发。我明白为什么,但问题是当一个函数(如下所示)生成一个具有到期时间的身份验证令牌时。它可能会在“重试”请求时令牌过期,因为在重试期间未重新调用 Exchange 函数。有没有办法为每次重试重新生成令牌?

下面会AuthClientExchangeFunction生成一个过期的身份验证令牌 (JWT)。

假设一个令牌的有效期为 2999 毫秒 -> 每个重试请求都因 401 而失败。

编辑 这是一个可执行的例子

输出