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

Micronaut声明性REST客户端引发错误-@Introduction方法侦听器丢失

左丘昊天
2023-03-14

当我为我的Micronaut声明性客户端自动连接客户端接口时,我得到这个错误:

Caused by: java.lang.IllegalStateException: At least one @Introduction method interceptor required, but missing. Check if your @Introduction stereotype annotation is marked with @Retention(RUNTIME) and @Type(..) with the interceptor type. Otherwise do not load @Introduction beans if their interceptor definitions are missing!
    at io.micronaut.aop.chain.InterceptorChain.resolveIntroductionInterceptors(InterceptorChain.java:194)
    at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1494)

正确的方法是什么?

详细资料

我有一个已建立的Grails应用程序,最近我从3升级了它。x到4.0.1。

这个应用程序有一个并行执行多个REST调用的服务,我正在尝试添加一个使用新Micronaut HTTP声明性客户端的新REST调用

我将客户端库添加到build.gradle中的依赖项

    compile "io.micronaut:micronaut-http-client"

我的客户端界面如下(在src/main/groovy中):

package com.mycompany.xyz.rest

import com.mycompany.xyz.rest.myendpoint.Results
import io.micronaut.http.annotation.Get
import io.micronaut.http.annotation.Header
import io.micronaut.http.client.annotation.Client

@Client('xyzRest')
@Header(name = 'myauthkey', value = '${myAuthKey}')
interface XyzRestClient {
    @Get('/myendpoint')
    Results myendpoint(String param1, String param2)
}
package com.mycompany.xyz.rest.myendpoint

import com.mycompany.xyz.rest.myendpoint.DataItem
import groovy.transform.CompileStatic

@CompileStatic
interface Results extends List<DataItem> {
}

我在application.yml中配置了URL:

environments:
    development:
        micronaut:
            http:
                services:
                    xyzRest:
                        urls:
                            - http://xyz.mycompany.com/rest/v1

关于@Introduction的消息让我觉得Micronaut没有编译声明性客户端。有一些吗

我还错过了什么?

更新:

我尝试更改构建。gradle实现的依赖性,如Micronaut文档所示,而不是如Grails文档所示的编译。没有骰子。

更新2:

我发现httpclientryductionadvice的构造函数在启动过程中从未被调用。我不知道为什么它没有被包括在我的项目中。IntelliJ在外部库中显示micronaut http客户端:1.1.4,并将其设置为compilescope。

共有1个答案

常彭薄
2023-03-14

一个gradlew clean似乎已经解决了这个问题。

为了子孙后代的利益,我试图倒行逆施,重复这个问题,但到目前为止,我还没能做到。

 类似资料:
  • 我将使用来自Micronaut文档(声明性Http客户端)的代码-我正在使用Spock 宠物手术。JAVA 我有一个声明式客户端: 我的目标是当我运行一个测试类时,我想调用(@Replaces)另一个类(PetDummy),而不是PetClient,PetDummy类位于我的测试文件夹中 测试类: 然而,在调用PetClient的最后,我也尝试了@Factory注释,但没有成功 PetClient

  • Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ri

  • 基本上,我希望监听我的rest api调用。就像有人向我的rest API发送数据一样。(例如:http://localhost:8080/api/people),然后websocket客户机侦听并可以从该地址获得响应,如果有人调用该地址。(就像使用postman从rest api获得响应一样,websocet客户机可以监听响应。)。我有点迷路了,我不知道如何用websocket客户端监听我的re

  • 我正在发送一个请求到一个服务器,它给了我一个200,没有身体(完全可以接受),但是我无法解决如何配置micronaut注释来处理这个问题。无论我尝试什么,它都试图将空响应解码为JSON(至少我认为这是它正在做的,因为它给出了一个意想不到的错误,而不是当身体出错时得到的正常杰克逊错误)。我在微型文档中找不到任何关于如何做到这一点的东西。

  • 我希望能够使用Micronaut的声明性客户端,根据我是在本地开发环境还是在生产环境中,找到不同的endpoint。 我在中设置客户端的基本uri: 阅读来自Micronaut的文档,他们让开发人员跳过了相当多的障碍,将动态值输入到实际客户端。它们实际上很混乱。所以我创建了这样的配置: 但是正如您所看到的,这实际上并不是从中读取任何值,它只是将const值设置为类的静态值。我希望值根据我所处的环境

  • 尝试使用Micronaut声明性客户端上传多个文件。 http客户端 将多个文件添加到多部分 产品控制器 例外