在 HTTP 端點處理程式方法中使用 Mono 作為引數有什么好處?
假設我有這個代碼:
public Mono<ResponseDto> handle (@RequestBody Mono<RequestBodyDto> requestBody) {
return requestBody
.flatMap(service::doSomething)
.doOnError(%printError with requestBody%);
}
我想將請求記錄在錯誤日志中,但我無法在錯誤處理 lambda 中訪問它。我不能呼叫 requestBody.block()。
為什么我不能這樣做:
public Mono<ResponseDto> handle (@RequestBody RequestBodyDto requestBody) {
return Mono.just(requestBody)
.flatMap(service::doSomething)
.doOnError(%printError with requestBody%);
}
?
在這種情況下,我可以通過方法引數訪問 requestBody。
uj5u.com熱心網友回復:
反應式編程迎合高性能異步資料流。如果僅出于日志記錄的目的序列化有效負載,則會破壞此優化并冒記憶體泄漏的風險。您可以記錄元資料。
如果您仍然需要記錄請求或回應主體,您可以考慮使用 WebFilter,請參見此處的示例:如何在 Spring WebFlux 中記錄請求和回應主體
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/429653.html
標籤:爪哇 春天 spring-webflux 反应堆
上一篇:如何在模擬第三方API的同時測驗springrest控制器?
下一篇:SpringBoot-SpringSecurity-InvalidBearerTokenException錯誤處理
