1

我尝试为我的后期服务quarkus-rest-client添加一个示例,这是一个使用 Quarkus 构建的简单 REST API。

java版本运行良好。

当我添加另一个 Kotlin 来测试 Quarkus 中的 kotlin 和 Gradle 支持时,它失败了,无法将 REST Client 接口作为 CDI bean 注入。

PostControlloer是 Jaxrs 资源,用于公开组合原始两个 API 的聚合 API。

@Path("/api")
@RequestScoped
class PostController(@Inject @RestClient val client: PostResourceClient) {

//    @Inject
//    @RestClient
//    lateinit var client: PostServiceClient

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    fun getPosts(@QueryParam("q")
                 q: String,
                 @QueryParam("offset")
                 @DefaultValue("0")
                 offset: Int,
                 @QueryParam("limit")
                 @DefaultValue("10")
                 limit: Int): Response {
        val posts = this.client.getAllPosts(q, offset, limit).entity as List<Post>
        val count = this.client.countAllPosts(q).entity as Long
        return ok(PostPage(posts, count)).build()
    }

}

以上两种注入Bean的方法都失败了。

REST 客户端界面:

@Path("/posts")
@RegisterRestClient
interface PostResourceClient {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    fun getAllPosts(
            @QueryParam("q")
            q: String,
            @QueryParam("offset")
            @DefaultValue("0")
            offset: Int,
            @QueryParam("limit")
            @DefaultValue("10")
            limit: Int
    ): Response

    @GET
    @Path("count")
    @Produces(MediaType.APPLICATION_JSON)
    fun countAllPosts(
            @QueryParam("q")
            q: String
    ): Response

}

此 Rest Client 接口的应用程序配置。

com.example.PostResourceClient/mp-rest/url=http://localhost:8080
com.example.PostResourceClient/mp-rest/scope=javax.inject.Singleton

完整的代码在这里

4

1 回答 1

3

与错误重复以使用 kotlin + quarkus 注入一些依赖项,这是一个 MicroProfile RestClient 问题。请参阅原始 SO 答案中的解决方法。

MicroProfile RestClient 上已打开一个问题以对此进行修复并在 Quarkus 问题跟踪器上进行跟踪:https ://github.com/quarkusio/quarkus/issues/5413

于 2019-11-28T11:33:47.290 回答