kotlin - 在网关中读取请求正文 - Webflux 和 Kotlin
问题描述
在网关中,我需要从请求正文中读取名为“Key”的请求的参数并将其写入日志。我尝试了以下可以阅读正文的方法。但是,由于我已经阅读了正文,因此服务中的请求处理没有通过。另一个问题是,return 语句在 lambda 块完成读取请求之前执行。我怎么能延迟 return 语句直到 lambda 块完成?
我使用的方法:
private fun getKey(exchange: ServerWebExchange): String? {
val rawRef = AtomicReference<String>()
exchange.request.body.subscribe { buffer ->
val bytes = ByteArray(buffer.readableByteCount())
buffer.read(bytes)
DataBufferUtils.release(buffer)
val jsonObject = ObjectMapper().readTree(Strings.fromUTF8ByteArray(bytes))
rawRef.set(jsonObject.get("key").textValue())
}
return rawRef.get()
}
任何关于如何在不干扰进一步处理的情况下阅读正文的建议都会有所帮助。
解决方案
推荐阅读
- javascript - 在道具更改之前运行 React componentDidUpdate
- docker - 连接到 ClusterIP,要设置什么防火墙策略?
- asp.net-core - 使用 Nginx 作为反向代理时出现错误 404
- python - Pyinstaller 导入的代码无法加载图片
- sql - 2 选择不同的 WHERE
- typescript - 打字稿:如何声明默认导出也是 UMD 命名空间?
- javascript - 为什么 console.log() 会绕过 addEventListener?
- c - 我是否需要在具有“特殊类型”的头文件中包含导入?
- python - 如何将 Github Actions 用户输入传递给 python 脚本
- msal.js - 使用 msal-react 的 React 应用程序,如何自动验证用户身份