如果 Mono 为空,则创建未找到的 ServerResponse

Create a not found ServerResponse if a Mono is empty

我正在使用 Spring Boot 2.2.6、Kotlin 和协程来实现简单的反应式休息 API。我正在尝试使用 functional style.

如果存储库 return 是空的 Mono<Task>Task 是一个简单的 class 我的领域模型)?

suspend fun findOne(request: ServerRequest): ServerResponse {
    val id = request.pathVariable("id")
    val task = repository.findById(id)
    return ServerResponse
            .ok()
            .json()
            .bodyAndAwait(task.asFlow())
}

注意我用的是协程。我需要一个 Flow 的实例。 等示例不适用。

非常感谢。

我认为真正的问题是如何将 Mono 转换为悬浮结果。

请看here.

实际上,您正在查看的示例中使用了这种方法。 检查 here

更新(添加代码)

suspend fun findOne(req: ServerRequest): ServerResponse {
        val id  = req.pathVariable("id").toInt()
        return taskRepo.findById(id)
                .flatMap { task->ServerResponse.ok().json().body<Task>(task) }
                .switchIfEmpty { ServerResponse.notFound().build() }
                .awaitSingle()

    } 

更新 2 创建了一个小型演示项目 here