当前位置: 首页 > 知识库问答 >
问题:

Spring webclient抛出块不受支持异常

百里雅珺
2023-03-14

我正在尝试从spall-start进行HTTP调用。该调用在post man中工作正常,下面是调用的curl版本,

curl --location --request POST 'https://sampletest.com:8811/rest/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'client_id=126763****ghsei99****' \
--data-urlencode 'client_secret=126763****ghsei99****' \
--data-urlencode 'param1=pppp' \
--data-urlencode 'param2=pppp'

但是我试图使用WebClient进行相同的调用。

WebClient webClient = WebClient.builder().baseUrl("https://sampletest.com:8811")
                    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE).build();

            MultiValueMap<String, String> formData = new LinkedMultiValueMap<>();
            formData.add("client_id","126763****ghsei99****");
            formData.add("client_secret", "126763****ghsei99****");
            formData.add("param1","pppp");
            formData.add("param2","pppp");

            AuthenticationResponseBean authenticationResponseBean = webClient.post().uri("/rest/oauth/token").body(BodyInserters.fromFormData(formData))
                    .retrieve().bodyToFlux(AuthenticationResponseBean.class).blockLast();

但是,应用程序正在抛出异常,

JAVAlang.IllegalStateException:block()/blockFirst()/blockLast()正在阻塞,这在thread reactor-http-nio-3中不受支持

这里出了什么问题?我对反应式编程非常陌生,谷歌对这个问题的搜索表明为什么需要块?

提前谢谢你。

共有1个答案

赫连俊雄
2023-03-14

根据我的理解,阻塞实际上会阻塞线程。从项目反应器文档:

  • “无限期阻塞,直到上游发出最后一个值或完成”

所以如果你不需要阻止,或者你不需要等待最后一个元素,你就不需要它。所以根据你的需要,订阅可以工作。

 类似资料:
  • 所以我试着从一个字符串中使用getBytes,我知道如果它遇到一个不能变成真实数据的字符,它会抛出一个UnsupportedEncodingException。我添加了java.io来提供异常,但是当我把它放到try catch语句中时,我得到了“UnsupportedEncodingException的不可到达的catch块。此异常从不从try语句体中引发" 这是我的确切结构。myCharact

  • 我用的是IntelliJ IDEA Pro 13.1.2。从未使用过13以下的任何版本。 当试图从IDE运行时,我得到以下消息:

  • 问题内容: 我有通过执行PreparedStatement插入数据库表的JDBC代码。当我在内存中的HSQLDB数据库上运行代码时(作为JUnit测试的一部分),我得到一个SQLFeatureNotSupportedException信息,唯一的信息是消息“功能不受支持”和供应商代码-1500。我正在做的是基本插入到表中- 我无法想象最新的HSQLDB不支持此功能。 我的代码: 谁能说出问题所在或

  • 我不知道它为什么要用JDK10来做任何事情,但我还是得到了这个信息。 我很乐意使用JDK10,但是我的项目在那个版本中不能工作,所以我要回去看看它在哪些版本中工作。我已经为版本1.4到版本10安装了SDK。 我也尝试过使用JDK1.8进行构建,但得到的错误消息略有不同: 有人能告诉我如何使用JDK1.9或1.8构建我的项目吗?

  • 问题内容: 当我尝试使用Java 7连接URL(支持TLS 1.2且以前与Java 7兼容的供应商URL之一)时,发现以下异常: 这样我就启用了,并且 在那之后我也遇到了同样的问题。然后,我将Java版本升级到8,这样它就可以连接到URL而没有任何SSL问题。 如本博客所述,在Java 8中,默认设置为TLS 1.2,并且可以使用Java 7中的属性调整TLS 1.2 。在Java 7中,如果我根

  • 我是自动化的一个API的POST调用使用Rest保证和内容类型和ACCEPT头我必须使用"应用程序/vnd.apijson"。但是每次我使用“应用程序/vnd.apijson”,我都会得到415个状态代码。尽管使用邮递员的相同POST呼叫工作得非常好。 以下是我的示例代码: 以下是收到的答复 我曾尝试将Content-Type更改为应用程序/json,正如其他帖子/评论所建议的那样,但这似乎对我的