| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10!  | 
    
WebClient可以通过在末尾阻止结果来同步使用:
- 
Java
 - 
Kotlin
 
Person person = client.get().uri("/person/{id}", i).retrieve()
	.bodyToMono(Person.class)
	.block();
List<Person> persons = client.get().uri("/persons").retrieve()
	.bodyToFlux(Person.class)
	.collectList()
	.block();
val person = runBlocking {
	client.get().uri("/person/{id}", i).retrieve()
			.awaitBody<Person>()
}
val persons = runBlocking {
	client.get().uri("/persons").retrieve()
			.bodyToFlow<Person>()
			.toList()
}
但是,如果需要进行多次调用,则避免对每个调用进行阻塞会更有效 单独响应,而是等待组合结果:
- 
Java
 - 
Kotlin
 
Mono<Person> personMono = client.get().uri("/person/{id}", personId)
		.retrieve().bodyToMono(Person.class);
Mono<List<Hobby>> hobbiesMono = client.get().uri("/person/{id}/hobbies", personId)
		.retrieve().bodyToFlux(Hobby.class).collectList();
Map<String, Object> data = Mono.zip(personMono, hobbiesMono, (person, hobbies) -> {
			Map<String, String> map = new LinkedHashMap<>();
			map.put("person", person);
			map.put("hobbies", hobbies);
			return map;
		})
		.block();
val data = runBlocking {
		val personDeferred = async {
			client.get().uri("/person/{id}", personId)
					.retrieve().awaitBody<Person>()
		}
		val hobbiesDeferred = async {
			client.get().uri("/person/{id}/hobbies", personId)
					.retrieve().bodyToFlow<Hobby>().toList()
		}
		mapOf("person" to personDeferred.await(), "hobbies" to hobbiesDeferred.await())
	}
以上只是一个例子。还有很多其他的模式和运算符用于放置 一起形成一个反应式管道,可以进行许多远程调用,可能有些是嵌套的, 相互依存,直到最后都没有阻塞。
| 
 使用 或 ,您永远不必在 Spring MVC 或 Spring WebFlux 控制器中阻塞。
只需从控制器方法返回生成的反应类型即可。同样的原则也适用于
Kotlin 协程和 Spring WebFlux,只需在
controller 方法。  | 
| 
 使用 或 ,您永远不必在 Spring MVC 或 Spring WebFlux 控制器中阻塞。
只需从控制器方法返回生成的反应类型即可。同样的原则也适用于
Kotlin 协程和 Spring WebFlux,只需在
controller 方法。  |