繁体   English   中英

Spring Rest API 调用服务与延迟<>

[英]Spring Rest API calling service with Deffered<>

我的代码功能,但不确定我是否正确实施它。

我有一个使用 Retrofit 调用 Youtrack API 的服务层,进行一些后过滤并返回问题列表。 下面的代码是简化版,但应该足以制作一张图片。

suspend fun getProjectIssuesFromYt(
    project: String,
    youTrackInstance: YouTrackInstance,
    after: Int,
    max: Int
): List<Issues> = coroutineScope {
    val service = Youtrack.getYoutrack(youTrackInstance).service
    val deferreds: Deferred<List<Issues>> =
        async(Dispatchers.Default) {
            service.getIssuesByProject(
                project = project, max = max,
                after = after
            ).bodyList()
        }
    deferreds.await()
}

如何从 REST api 调用此服务? 唯一有效的解决方案是使用runBlocking调用它,但我认为这不是 go 的一种方式。

@GetMapping("/getProjectIssuesFromYt")
fun getProjectIssuesFromYt(
    project: String,
    youTrackInstance: YouTrackInstance,
    after: Int,
    max: Int
): List<Issues> = runBlocking {
    clientService.getProjectIssuesFromYt(
        project = project,
        youTrackInstance = youTrackInstance,
        after = after,
        max = max
    )
}

我确实尝试让我的 controller function 暂停并在没有 runBlocking 的情况下运行它,但我收到错误消息。

"Parameter specified as non-null is null: method kotlinx.coroutines.internal.ScopeCoroutine.<init>, parameter context",

先感谢您,

马尔科

If you are using Spring MVC: Kotlin Coroutines are only available as an alternative to Java's Project Reactor in Spring Web Flux. Spring MVC 控制器在设计上是阻塞的,这就是为什么它们不能作为挂起功能实现的原因。 https://spring.io/blog/2019/04/12/going-reactive-with-spring-coroutines-and-kotlin-flow

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM