Как в Reactor Netty Http Server получить тело POST-запроса?

В Reactor Netty, для получения тела POST-запроса в Http Server, можно использовать класс HttpServerRequest и его метод receive(), а также BodyInserters и BodyExtractors из пакета org.springframework.web.reactive.function.server.

Вот пример кода, который демонстрирует, как получить тело POST-запроса в Reactor Netty Http Server:

import org.springframework.http.MediaType;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.reactive.function.BodyExtractors;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.server.*;
import reactor.core.publisher.Mono;

public class MyHttpHandler {

    public Mono<ServerResponse> handlePostRequest(ServerRequest request) {
        Mono<String> requestBody = request.bodyToMono(String.class); // Получить тело POST-запроса
        return requestBody.flatMap(body -> {
            // Обработать полученное тело POST-запроса
            // В данном примере вернем его обратно в ответе
            return ServerResponse.ok().contentType(MediaType.TEXT_PLAIN)
                    .body(BodyInserters.fromValue(body));
        });
    }

    public RouterFunction<ServerResponse> routes() {
        return RouterFunctions
                .route(RequestPredicates.POST("/api/endpoint"), this::handlePostRequest);
    }

    public static void main(String[] args) {
        MyHttpHandler handler = new MyHttpHandler();
        HttpServer.create()
                .port(8080)
                .route(handler.routes())
                .bindNow();
    }
}

В этом коде MyHttpHandler - это обработчик HTTP-запросов. Метод handlePostRequest(ServerRequest request) использует request.bodyToMono(String.class) для получения тела POST-запроса. Затем он обрабатывает тело запроса и возвращает его в ответе с помощью ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).body(BodyInserters.fromValue(body)).

Метод routes() устанавливает маршруты для обработки запросов. В данном примере у нас один маршрут, определенный как POST-запрос на /api/endpoint.

В main() методе создается экземпляр MyHttpHandler и используется для настройки и запуска Reactor Netty Http Server на порту 8080.

Теперь, когда вы отправляете POST-запрос на http://localhost:8080/api/endpoint, тело запроса будет получено и обработано методом handlePostRequest().