Контроллер Spring MVC должен использоваться в качестве прокси-сервера для другой службы для обслуживания, возможно, больших файлов.
Чтобы не хранить в памяти весь ответ WebClient от другой службы в любой момент времени, я хотел использовать реактивные свойстваSpring 5+ Reactor проект и поток его ответ, как он используется браузером.
Текущий код выглядит как
import org.springframework.stereotype.Controller
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.reactive.function.client.ClientResponse
import org.springframework.web.reactive.function.client.WebClient
import reactor.core.publisher.Mono
@Controller
class ReportController {
@GetMapping("/reports")
fun getReport(): Mono<ClientResponse> {
val webCient = WebClient.create()
return webCient
.get()
.uri("http://localhost:3333/file")
.exchange()
}
}
И это вызывает
java.lang.IllegalStateException: Could not resolve view with name 'reports'.
at org.springframework.web.reactive.result.view.ViewResolutionResultHandler.lambda$resolveViews$3(ViewResolutionResultHandler.java:277) ~[spring-webflux-5.0.6.RELEASE.jar:5.0.6.RELEASE]
- Как настроить контроллер для обработки
Mono<ClientResponse>
? - Если ответ имеет тип
Mono
, будет ли запрос иметь обратное давление?Есть ли необходимость преобразовывать его в байтовые куски и делать его Flow
? - В документации Spring говорится о многих преимуществах противодавления, но не дается ответ на вопрос выше, а также не выдается предупреждение о
Mono
ответе,Это все еще реагирует?