WebClient
バイトから DTO に変換される前に XML 応答をインターセプトするにはどうすればよいですか?
を追加しようとしましたexchangeStrategy
が、どのようDataBuffer
に文字列に変換し、その後でもsuper.decode()
メソッドを呼び出すことができますか?
ExchangeStrategies.builder().codecs((configurer) -> {
configurer.defaultCodecs().jackson2JsonDecoder(new Jaxb2XmlDecoder() {
@Override
public Flux<Object> decode(Publisher<DataBuffer> inputStream, ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
//TODO how to log the response as string content?
return super.decode(inputStream, elementType, mimeType, hints);
}
}));
以下のように成功しましたが、それが正しい解決策かどうかわかりませんか?特に空のコレクションを内部で返すのはflatMapInterable()
気分が悪いですが、それを機能させる別の方法は見つかりませんでした。
@Override
public Flux<Object> decode(Publisher<DataBuffer> inputStream, ResolvableType elementType, MimeType mimeType, Map<String, Object> hints) {
return DataBufferUtils.join(inputStream)
.flatMapIterable(buffer -> {
try {
LOGGER.info(StandardCharsets.UTF_8.decode(buffer.asByteBuffer()).toString());
return Collections.emptyList();
} finally {
DataBufferUtils.release(buffer);
}
})
.map(arg -> super.decode(inputStream, elementType, mimeType, hints));
}
問題:map()
を既に読んでいるため、もう実行されませんDataBuffer
。どうすれば何度も読むことができますか?