我怀疑我在这里确实缺少一些明显的东西,但是我无法弄清楚如何在Reactor-netty中使用HttpServer实现一个非常简单的用例。
本质上,我想实现一种功能,当响应对象不为null时使用200 OK
进行响应,而当响应对象为null时使用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)
}
}
如果源对象为null(由于使用it!!
),则此代码当前中断。我真正想要实现的是切换响应状态代码,如果源对象为null,则不发送任何字符串内容。但是,我只是想不出如何根据Mono<T?>
的内容来切换行为。
任何帮助将不胜感激!
答案 0 :(得分:0)
我设法通过以下代码解决了类似的问题
Mono<String> valueMono = Mono.from(...).doOnSuccess(s -> {
if (s == null) {
response.status(HttpResponseStatus.NOT_FOUND);
}
});
return response.sendString(valueMono);