Веб-фильтр Spring webflux удаляет тело запроса

#spring-webflux #spring-filter

Вопрос:

У меня есть созданный фильтр, в котором я получаю доступ к телу полезной нагрузки и выполняю некоторую логику (на данный момент, скажем, я регистрирую тело). На последнем шаге я возвращаю Mono, но когда запрос проходит через контроллер к службам, он выдает плохую ошибку запроса, что тело отсутствует.

Код для фильтра:

     public Mono<Void> filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) {
        HttpHeaders headers = serverWebExchange.getRequest().getHeaders();
        String domain = headers.getFirst("domain");
        return serverWebExchange.getRequest().getBody()
                .single()
                .flatMap(body -> Mono.just(parseBody(body)))
                .flatMap(s -> webFilterChain.filter(serverWebExchange));
}

private String parseBody(DataBuffer fbody) {
        System.out.println("parsing body");
        ByteArrayOutputStream baos = null;
        try {
            baos = new ByteArrayOutputStream();
            Channels.newChannel(baos).write(fbody.asByteBuffer().asReadOnlyBuffer());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return baos.toString(StandardCharsets.UTF_8);
}
 

Ошибка: org.springframework.web.server.Исключение ServerWebInputException: 400 BAD_REQUEST «Тело запроса отсутствует»

Что может вызвать такое поведение?

Комментарии:

1. Вы пробовали отлаживать свой код прямо перед оператором return в методе filter ()? Вы должны иметь возможность просматривать данные, доступные в serverWebExchange. Это может быть отправной точкой для определения того, получает ли сервер какие-либо данные в теле запроса.

2. @NicodemusOjwee Я думаю, что эта строка плоская карта(s -> цепочка веб-фильтров. фильтр(serverWebExchange)) вызывает это, так как я удалил все и все равно выдает ту же ошибку. удаление из flatmap и выполнение в качестве цепочки веб-фильтров возврата. фильтр(serverWebExchange) работает