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

如何在Micronaut应用中从库注入HTTP客户端?

符献
2023-03-14

我有一个用于其他服务的外部http客户端,我已经将其导入到我的micronaut应用程序中,但收到一个错误,该错误指出:

原因:io.Micronaut.Context.Exceptions.NoSuchBeanException:不存在类型为[xxx.files.client.Micronaut.filesclient]的bean。确保bean没有被bean要求禁用(为'io.micronaut.context.condition'启用跟踪日志以检查),如果bean被启用,则确保类被声明为bean并且注释处理被启用(对于Java和Kotlin,'micronaut-inject-'依赖项应该被配置为注释处理器)。

我已经在应用启动时添加了这些类:

object TransformerApplication {
    @JvmStatic
    fun main(args: Array<String>) {
        Micronaut.build()
                .packages(
                        "xxx.transformer",
                        "xxx.files.client.micronaut"
                )
                .mainClass(TransformerApplication.javaClass)
                .start()
    }
}

但在创建时:

@KafkaListener("transformer-group")
class EventsConsumerImpl(private val xlsTransformer: XlsTransformer,
                         private val filesClient: FilesClient,
                         private val workspacesClient: WorkspacesClient) : EventsConsumer {
    ...
    }

我的HTTP客户端:

@io.micronaut.http.client.annotation.Client("\${files.url}")
interface FilesClient {

    companion object {
        const val FILES_TOKEN_KEY = "FILES"
    }

    @FilesTokenVerification
    @Get("\${files.url}/{fileId}")
    fun getFile(@PathVariable fileId: String): ByteArray

    @FilesTokenVerification
    @Patch("\${files.url}/{fileId}/info")
    fun updateFileStatus(@PathVariable fileId: String, @Body metadata: Metadata): Metadata

    @FilesTokenVerification
    @Get("\${files.url}/{fileId}/info")
    fun getFileMetadata(@PathVariable fileId: String): Metadata
}```

Can someone explain to me what I'm doing wrong?

共有1个答案

陆昕
2023-03-14

通常使用工厂:

https://docs.micronaut.io/latest/guide/index.html#工厂

但我不知道这是否适用于声明式客户端。也许可以试试包装纸。

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

  • 我试图为Spring Cloud OpenFeign提供CloseableHttpClient。Spring Cloud Open Faign Documentation表示它支持CloeableHttpClient。Spring文档没有给出任何实际替换HTTP客户端的例子。 基本上,我将SSLContext提供给HTTP客户端,我想假装使用这个SSLContext加载的客户端。如何将这个Clos

  • 我的应用程序基于Micronaut和GraalVM(Java 11),并对: 当我使用此DockerFile构建应用程序的docker映像时: 在我当地的环境里一切都正常。但当我将映像推送到Google Cloud Repository,将其部署到Cloud Run,并尝试访问endpoint时,容器会崩溃,因为503服务不可用。 日志中的错误是“请求失败,因为到实例的HTTP连接有一个错误”。启

  • @Factory公共类MyFactory{ } 用于检查详细输出##的简单测试案例 picocli.CommandLine$InitializationException:无法实例化类Com.UtilityCommand:IO.Micronaut.Context.Exceptions.DependencyInjectionException:无法为类Com.UtilityCommand的字段[so

  • 我有一个micronaut数据应用程序,对于复制操作,我需要使用相同的JPA存储库来访问多个数据源。我想将它们注入不同的变量,例如和。数据源在带有默认名称和目标名称。如果我用声明一个存储库变量,它将被初始化以访问默认数据源。 问题是,如何声明注入的存储库变量,以便它访问目标数据源?我可以声明或的目标注入,如下所示。但这两种注释都不会对存储库变量或参数产生影响。

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