当我为我的 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 调用。
我将客户端库添加dependencies
到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> {
}
我在以下位置配置了 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
范围。