Каковы различия Flux<T>, Flux<ResponseEntity<T>>, ResponseEntity<Flux<T>> как тип возвращаемого значения в Spring WebFlux?

Я часто вижу три разных типа возвращаемых ответов: , , и в контроллерах стиля MVC, использующих Spring WebFlux. В документации объясняется разница между и . Spring автоматически оборачивает Flux<T>как либо или ? если да, то какой?

Тем более, как решить, какой из них вернуть, ResponseEntity<Flux<T>>или Flux<ResponseEntity<T>>? Какая ситуация или вариант использования потребует использования одного вместо другого?

И, с точки зрения веб-клиента, есть ли существенные различия при использовании двух типов ответов?

1 ответ

Spring автоматически оборачивает Flux как ResponseEntity<Flux> или Flux<ResponseEntity>? если да, то какой?

Spring автоматически обернет этот Flux как ResponseEntity<Flux>. Например, если у вас есть веб-конечная точка, как показано ниже.

@GetMapping("/something") public Flux handle() { doSomething() }

И если вы потребляете из WebClient, вы можете получить свой ответ какили же. По умолчанию нет, но я думаю, что хорошей практикой является извлечение только Flux, если вам явно не нужно что-то из ResponseEntity. В документе Spring есть хорошие примеры этого .

На самом деле вы можете использовать его как файл , но это применимо только для более сложных случаев использования.

Более того, как решить, какой из них вернуть, ResponseEntity<Flux> или Flux<ResponseEntity>? Какая ситуация или вариант использования потребует использования одного над другим?

Это действительно зависит от вашего варианта использования.

Возвращение говорит что-то вроде,

      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>имеет смысл (это эквивалентно return )

И наконец

И, с точки зрения веб-клиента, есть ли существенные различия при использовании двух типов ответа?

Я думаю, что вы пытаетесь спросить, следует ли вам использовать ResponseEntity<Flux<T>>или же Mono<ResponseEntity<T>>при использовании из WebClient. И весенний документ довольно элегантно отвечает на этот вопрос.

ResponseEntity<Flux> делает статус ответа и заголовки известными немедленно, в то время как тело предоставляется асинхронно на более позднем этапе.

Mono<ResponseEntity> предоставляет все три — статус ответа, заголовки и тело, асинхронно на более позднем этапе. Это позволяет изменять статус ответа и заголовки в зависимости от результата обработки асинхронного запроса.

Другие вопросы по тегам