Spring Webclient投掷块不支持异常

问题描述 投票:0回答:1

我正在尝试从spring-boot进行HTTP调用。该呼叫在邮递员中正常运行,下面是该呼叫的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();

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

java.lang.IllegalStateException:block()/ blockFirst()/ blockLast()是阻塞,这在线程反应堆中不支持-http-nio-3

这里出了什么问题?我对reactive-programming非常陌生,而Google搜索问题表明为什么需要block

先谢谢您。

java spring-boot http resttemplate spring-webclient
1个回答
0
投票

据我了解,阻塞实际上会阻塞线程。从ProyectReactor docs

  • “无限期阻塞,直到上游发信号通知其最后一个值或完成”。

因此,如果您不需要阻塞或不需要等待最后一个元素,则不需要它。

© www.soinside.com 2019 - 2024. All rights reserved.