当前位置: 首页 > 知识库问答 >
问题:

不能在Quarkus kotlin应用程序中注入REST客户端接口

荣德厚
2023-03-14

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

java版本运行良好。

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

PostController是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

完整的代码在这里。

共有1个答案

丌官开宇
2023-03-14

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

@Inject
@field: RestClient
lateinit internal var countriesService: CountriesService

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

 类似资料:
  • 在一节中,引入了接口,允许在请求中注入头,但必须返回同步响应。我们不能使用,这正是我的情况所需要的,因为我需要在头中添加一个令牌,而这个令牌是由返回的另一个restendpoint的请求检索的。 我如何在新的实现中实现这一点?如果不可能,有没有解决办法?

  • 我正在尝试更新在WSO2 Identity Server中创建的用户信息,该服务器使用LDAP作为用户存储,并使用SCIM客户端Java应用程序。从JAVA客户端应用程序使用SCIM Restendpoint 我已经为这个应用程序配置了证书和主机名,并用hasini@gmail.com“用户和它的工作。 我的问题是,当我试图为这个用户使用类时。WSO2IS服务器显示错误: 波姆。xml: 这是将R

  • 描述我正在使用MP Rest Client从我的服务实现中调用另一个Rest服务的错误,并希望通过使用覆盖一些头属性,但当我使用使用另一个CDI bean时,会引发。使用Micro Profile Rest Client 1.4,如果您的实现由CDI管理,则可以使用“@Inject”。这允许您注入机密,例如,或任何其他CDIBean来计算头值。 预期行为注入的ConfigProperty可用且不为

  • 我有一个用于其他服务的外部http客户端,我已经将其导入到我的micronaut应用程序中,但收到一个错误,该错误指出: 原因:io.Micronaut.Context.Exceptions.NoSuchBeanException:不存在类型为[xxx.files.client.Micronaut.filesclient]的bean。确保bean没有被bean要求禁用(为'io.micronaut

  • 客户端接入 积分商城是纯H5页面形式的,开发者客户端集成兑吧积分商城的方法是,直接在自己app的webview加载积分商城H5页面。 H5接入 开发者客户端接入,加载积分商城页面时,请务必做到以下几点,以保证积分兑换的用户体验。 保证webview可以自行适应页面:对接联调时需测试商城首页、商品详情页、活动页内容是否适配正常; Android应用下,为了用户兑换优惠券之后可以方便的去使用,请设置W

  • 我需要一个用于java spring应用程序的graphQL客户端,以与另一个基于graphQL API的微服务通信。我知道Apollo Android,但它似乎没有用maven实现(也许你知道maven的一些链接或示例等)。有什么想法和建议吗?提前感谢!