目前RestTemplate的javadoc声明:
注意:自5.0版本以来,非阻塞式反应org.springframework.web.reactive.client.WebClient提供了一种现代替代RestTemplate的方法,支持同步和异步以及流式场景的高效支持。 RestTemplate将在未来的一个版本中被弃用,并且不会添加重大新功能。
我们正在使用spring boot 2.0.6和spring 5.0.10编写一个新项目。
看到restTemplate即将被弃用,我们决定使用新的WebClient,它应该支持同步调用。但是我找不到任何有关如何实现的文档。
我已经在以下代码中使用了block:
然而,当从Spring控制器中调用时,会抛出以下异常
注意:自5.0版本以来,非阻塞式反应org.springframework.web.reactive.client.WebClient提供了一种现代替代RestTemplate的方法,支持同步和异步以及流式场景的高效支持。 RestTemplate将在未来的一个版本中被弃用,并且不会添加重大新功能。
我们正在使用spring boot 2.0.6和spring 5.0.10编写一个新项目。
看到restTemplate即将被弃用,我们决定使用新的WebClient,它应该支持同步调用。但是我找不到任何有关如何实现的文档。
我已经在以下代码中使用了block:
ResponseEntity<String> response = webClient.get()
.uri(url)
.exchange()
.flatMap(r -> r.toEntity(String.class))
.block();
然而,当从Spring控制器中调用时,会抛出以下异常
java.lang.IllegalStateException: block()/blockFirst()/blockLast() are blocking, which is not supported in thread
那么WebClient应该如何以同步方式使用呢?
编辑:我的pom.xml文件如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
spring-boot-starter-web
是罪魁祸首。现在可以工作了。谢谢! - Ramona Cristeaspring-boot-starter-web
才能使用同步的WebClient
?似乎我可以在不添加它的情况下使用同步的WebClient
。 - mazendspring-boot-starter-web
来使用同步的WebClient
。而且似乎spring-cloud-starter-netflix-eureka-server
包含了spring-boot-starter-web
,所以我误解了。 - mazend