Каковы различия 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> предоставляет все три — статус ответа, заголовки и тело, асинхронно на более позднем этапе. Это позволяет изменять статус ответа и заголовки в зависимости от результата обработки асинхронного запроса.