1

我经常在使用 Spring WebFlux 的 MVC 样式控制器中看到三种不同的响应返回类型:Flux<T>ResponseEntity<Flux<T>>Flux<ResponseEntity<T>>。该文档ResponseEntity<Flux<T>>解释了和之间的区别Flux<ResponseEntity<T>>。Spring 会自动包装Flux<T>ResponseEntity<Flux<T>>orFlux<ResponseEntity<T>>吗?如果是,是哪一个?

此外,如何决定返回哪一个,ResponseEntity<Flux<T>>或者Flux<ResponseEntity<T>>?什么情况或用例需要使用其中一种?

而且,从 webclient 的角度来看,在使用这两种类型的响应时是否有任何显着差异?

4

1 回答 1

1

Spring 是否自动将 Flux 包装为 ResponseEntity<Flux> 或 Flux<ResponseEntity>?如果是,是哪一个?

Spring 会自动将该 Flux 包装为 ResponseEntity<Flux>。例如,如果您有如下 Web 端点

@GetMapping("/something") 公共通量句柄() { doSomething() }

如果您从 WebClient 消费,您可以将响应检索为ResponseEntity<Flux<T>>Flux<T>。没有默认值,但我认为最好只检索 Flux,除非您明确需要 ResponseEntity 中的某些内容。Spring 文档有很好的例子

您实际上可以将其用作Flux<ResponseEntity<T>>,但这仅适用于更复杂的用例。

此外,如何决定返回哪一个,ResponseEntity<Flux> 还是 Flux<ResponseEntity>?什么情况或用例需要使用其中一种?

这实际上取决于您的用例。

返回ResponseEntity<Flux<T>>是说类似的东西,

I am returning a Response of a Collection of type T objects. 

哪里Flux<ResponseEntity<T>>说的更像

I am returning a Collection of Responses, where the responses have an entity of type T.

同样,我认为在大多数用例中返回Flux<T>是有意义的(这相当于返回ResponseEntity<Flux<T>>

最后

而且,从 webclient 的角度来看,在使用这两种类型的响应时是否有任何显着差异?

我认为您要问的是您是否应该使用ResponseEntity<Flux<T>>Mono<ResponseEntity<T>>何时从 WebClient 消费。spring doc 非常优雅地回答了这个问题

ResponseEntity<Flux> 在稍后异步提供正文时立即知道响应状态和标头。

Mono<ResponseEntity> 提供所有三者——响应状态、标头和正文,稍后异步提供。这允许响应状态和标头根据异步请求处理的结果而变化。

于 2022-01-23T06:05:30.147 回答