WebClient-如何获取请求正文?

本文介绍了WebClient-如何获取请求正文?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!,我已经开始使用WebClient,正在添加请求/响应的日志记录,并在构建WebClient时使用Filter方法:,我可以访问url、http方法、标头,但获取原始请求正文时遇到问题,因为body()请求的方法返回BodyInserter(BodyInserter<?, ? super ClientHttpRequest> body()。,如何将请求Body的BodyInserter表示转换为String表示?或者,如何正确记录整个请求/响应,同时还能够对其中的潜在凭据进行散列?,您可以围绕JSON编码器创建自己的包装器/代理类,并在序列化后的正文被发送到内部管道之前将其拦截。,此blog post显示如何记录WebClient请求和响应的JSON负载,具体地说,您将扩展Jackson2JsonEncoderencodeValue方法(如果是流数据,则encodeValues)。然后,您可以随心所欲地处理这些数据,如日志记录等。您甚至可以根据环境/配置文件有条件地执行此操作,此自定义日志编码器可以在创建WebClient时由编解码器指定:,更新2020/7/3:,这里是一个匆忙的例子,应用了相同的原则,但对于解码器:,您将使用WebClient上的codecs生成器方法将其与编码器一起配置。
当然,上面的方法只有在您的数据被反序列化为Mono的情况下才有效。但如果需要,可以覆盖其他方法。另外,我只是在那里标准输出结果JSON,但是您可以传递一个Consumer<String>或其他东西,让解码器将字符串发送到,或者只是从那里记录;由您决定。,警告一句,在当前形式下,这将使您的内存使用量翻倍,因为它缓冲了整个响应。如果您可以立即将该字节数据发送到另一个进程/线程以写入日志文件或某个输出流(甚至是Flux),则可以避免在内存中缓冲整个有效负载。,这篇关于WebClient-如何获取请求正文?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,
返回顶部
跳到底部

Copyright 2011-2024 南京追名网络科技有限公司 苏ICP备2023031119号-6 乌徒帮 All Rights Reserved Powered by Z-BlogPHP Theme By open开发

请先 登录 再评论,若不是会员请先 注册