【发布时间】:2019-07-26 18:24:02
【问题描述】:
我怀疑我在这里遗漏了一些非常明显的东西,但我无法弄清楚如何使用 reactor-netty 中的 HttpServer 实现一个非常简单的用例。
本质上,我想实现在响应对象不为空时使用200 OK 响应以及在响应对象为空时使用404 Not Found 响应的能力。
我正在使用 Kotlin,并向 HttpServerResponse 添加扩展函数以将对象映射到 JSON:
fun <T> HttpServerResponse.sendObjectAsJson(obj: Mono<T?>, mapper: (T) -> JsonObject): NettyOutbound {
val jsonString = obj.map { mapper(it!!) }.map { it.toString() }
return this
.status(OK)
.header(CONTENT_TYPE, "application/json")
.sendString(jsonString)
}
}
如果源对象为空(由于使用it!!),此代码当前会中断。我真正想要实现的是切换响应状态代码,如果源对象为空,则不发送任何字符串内容。但是,我就是不知道如何根据Mono<T?>的内容来切换行为。
任何帮助将不胜感激!
【问题讨论】:
-
我不使用 Kotlin,但作为翻译的猜测,您能否将函数中的第一行切换为
val jsonString = obj.map { it?.toString() },然后使用.status(if (jsonString == null) OK else OTHER_STATUS_CODE)作为状态码和 @987654328 @ 表示响应正文? -
感谢您的想法。问题 - 我没有很好地表达 - 你不能做你的第二行代码,因为 jsonString 将是一个 Mono
而不仅仅是一个字符串?这是我困惑的根源以及为什么似乎没有明显的方法
标签: netty project-reactor reactor-netty