将 Mono 作为参数的好处?
Benefits of having Mono as parameter?
在 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。
反应式编程迎合高性能异步数据流。如果您只是为了记录目的而序列化有效负载,则会破坏此优化并冒内存泄漏的风险。不过,您可以登录 meta-data。
如果您仍然需要记录请求或响应主体,您可以考虑使用 WebFilter,请参见此处的示例:
在 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。
反应式编程迎合高性能异步数据流。如果您只是为了记录目的而序列化有效负载,则会破坏此优化并冒内存泄漏的风险。不过,您可以登录 meta-data。
如果您仍然需要记录请求或响应主体,您可以考虑使用 WebFilter,请参见此处的示例: