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

Просто добавлена ​​расширяемая версия! NumberReader @ SourceForge

0
задан mayank jain 2 March 2019 в 15:07
поделиться

1 ответ

На консоли ничего не печатается, потому что вы не подписались на decodedRequest, поскольку мы знаем один из аспектов Reactive:

Ничего не происходит, пока вы не подпишетесь

[ 1114] Но если вы сделаете это, вы увидите печатное тело на консоли, но ваш код не будет работать, потому что следующие операторы не смогут прочитать тело, и вы получите IllegalStateException ( Разрешено только одному соединению получать подписчика. )

Итак, как ее решить?

  1. Создайте свою собственную оболочку для ServerWebExchange (пожалуйста, прочитайте об этом здесь: Как регистрировать тела запросов и ответов в Spring WebFlux )
  2. Регистрировать тела в HttpMessageDecoder. Например, если вы видите AbstractJackson2Decoder, вы найдете код, в котором Spring декодирует ваш буфер в объект и может записать его:

    try { Object value = reader.readValue(tokenBuffer.asParser(getObjectMapper())); if (!Hints.isLoggingSuppressed(hints)) { LogFormatUtils.traceDebug(logger, traceOn -> { String formatted = LogFormatUtils.formatValue(value, !traceOn); return Hints.getLogPrefix(hints) + "Decoded [" + formatted + "]"; }); } return value; }

0
ответ дан Yauhen Balykin 2 March 2019 в 15:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: