栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Spring WebFlux中记录请求和响应正文

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Spring WebFlux中记录请求和响应正文

这或多或少类似于Spring MVC中的情况。

在Spring MVC中,您可以使用

AbstractRequestLoggingFilter
过滤器和
ContentCachingRequestWrapper
和/或
ContentCachingResponseWrapper
。这里有很多折衷:

  • 如果您想访问servlet请求属性,则需要实际读取和解析请求主体
  • 记录请求主体意味着缓冲请求主体,这可能会使用大量内存
  • 如果要访问响应正文,则需要包装响应并在编写响应正文时对其进行缓冲,以便以后检索

ContentCaching*Wrapper
WebFlux中不存在类,但是您可以创建类似的类。但请记住以下几点:

  • 在内存中缓冲数据以某种方式违反了反应堆,因为我们正在尝试利用可用资源非常高效
  • 您不应该篡改实际的数据流,并且不应该频繁/频繁地刷新数据,否则就有可能破坏流使用案例
  • 在该级别,您只能访问
    DataBuffer
    实例,这些实例(大约)是内存有效的字节数组。这些属于缓冲池,并被回收以用于其他交换。如果未正确保留/释放这些内存,则会造成内存泄漏(并且缓冲数据以供日后使用肯定适合这种情况)
  • 同样在该级别,它只有字节,您无权访问任何编解码器来解析HTTP正文。如果最初不是人类可读的内容,我会忘记缓冲内容

您问题的其他答案:

  • 是的,这
    WebFilter
    可能是最好的方法
  • 不,您不应该订阅请求主体,否则您将使用处理程序将无法读取的数据;您可以
    flatMap
    根据要求将数据缓冲在
    doOn
    运算符中
  • 包装响应应该使您可以访问正在编写的响应正文;不过不要忘记内存泄漏


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/368325.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号