我尝试为我的后期服务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
完整的代码在这里。