如何在Project Reactor Netty HTTP Server中有条件地设置状态代码?

时间:2019-07-26 18:24:02

标签: netty project-reactor reactor-netty

我怀疑我在这里确实缺少一些明显的东西,但是我无法弄清楚如何在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?>的内容来切换行为。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我设法通过以下代码解决了类似的问题

Mono<String> valueMono = Mono.from(...).doOnSuccess(s -> {
  if (s == null) {
    response.status(HttpResponseStatus.NOT_FOUND);
  }
});
return response.sendString(valueMono);