0

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。どうすれば何度も読むことができますか?

4

1 に答える 1