0

当我为我的 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 调用。

我将客户端库添加dependenciesbuild.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> {
}

我在以下位置配置了 URL application.yml

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

关于的消息@Introduction让我认为 Micronaut 没有执行编译声明式客户端的过程。有没有一些

我还缺少什么?

更新:

我尝试将build.gradle依赖项更改implementation为 Micronaut 文档中compile所示的,而不是 Grails 文档中所示的 。没有骰子。

更新 2:

我发现HttpClientIntroductionAdvice在启动期间从未调用过构造函数。我不知道为什么它没有包含在我的项目中。IntelliJ 显示micronaut-http-client:1.1.4在外部库中,并且设置为compile范围。

4

1 回答 1

2

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

为了后代,我试图向后工作并复制问题,但到目前为止我还没有做到。

于 2020-03-12T20:57:11.883 回答