На консоли ничего не печатается, потому что вы не подписались на decodedRequest
, так как мы знаем один из аспектов Реактива:
Ничего не происходит, пока вы не подпишетесь
Но если вы сделаете это, вы увидите напечатанное тело на консоли, но ваш код не будет работать, потому что следующие операторы не смогут прочитать тело, и вы получите IllegalStateException
( Разрешено только одно соединение, получающее подписчика. )
Так, как решить это?
- Создайте свою собственную обертку для
ServerWebExchange
(пожалуйста, прочитайте об этом здесь: Как регистрировать тела запросов и ответов в Spring WebFlux ) Регистрировать тела в 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;
}