@Override
public Publisher<Void> apply(HttpServerRequest httpRequest, HttpServerResponse httpResponse) {
LOGGER.debug(
"Accepted request: {}, headers: {}, params: {}",
httpRequest,
httpRequest.requestHeaders(),
httpRequest.params());
if (httpRequest.method() != POST) {
LOGGER.error("Unsupported HTTP method. Expected POST, actual {}", httpRequest.method());
return methodNotAllowed(httpResponse);
}
return httpRequest
.receive()
.aggregate()
.map(ByteBuf::retain)
.doOnNext(content -> metrics.markRequest())
.flatMap(content -> handleRequest(content, httpRequest, httpResponse))
.doOnSuccess(avoid -> metrics.markResponse())
.onErrorResume(t -> error(httpResponse, ExceptionProcessor.toMessage(t)));
}