首页 > 解决方案 > 在网关中读取请求正文 - 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()
}

任何关于如何在不干扰进一步处理的情况下阅读正文的建议都会有所帮助。

标签: kotlinspring-webflux

解决方案


推荐阅读