Home > Enterprise >  Benefits of having Mono as parameter?
Benefits of having Mono as parameter?

Time:02-21

What are the benefits of having Mono as parameter in HTTP endpoint handler methods?

Let's say I have this code:

public Mono<ResponseDto> handle (@RequestBody Mono<RequestBodyDto> requestBody) {
   return requestBody
        .flatMap(service::doSomething)
        .doOnError(%printError with requestBody%);
}

I want to log the request in an error log, but I do not have access to it in error handling lambda. I can't call requestBody.block().

Why I can't just do this:

public Mono<ResponseDto> handle (@RequestBody RequestBodyDto requestBody) {
   return Mono.just(requestBody)
        .flatMap(service::doSomething)
        .doOnError(%printError with requestBody%);
}

?

In this case I have access to requestBody via the method parameter.

CodePudding user response:

Reactive programming caters for high performance asynchronous data streaming. If you serialize the payload just for logging purposes, you defeat this optimization and risk memory leaks. You can log meta-data though.

If you still need to log request or response bodies, you might consider using a WebFilter, see here for an example: How to log request and response bodies in Spring WebFlux

  • Related