使用 @ClientHeaderParam 从配置 属性 获取 header 值无效

Getting header value from a config property using @ClientHeaderParam is not working

我正在尝试使用 @ClientHeaderParam 注释从配置中获取一个 header 值到 Rest(easy) 客户端 https://quarkus.io/guides/rest-client-reactive#custom-headers-support,不幸的是它没有成功.该值被发送 as-is,而不是替换为相应的配置 属性 这大致是我在做什么

@RegisterRestClient
@ClientHeaderParam(name = "Key", value = "${api-key}")
public interface MyClient {

  @POST
  @Path("/api")
  @Consumes(MediaType.APPLICATION_OCTET_STREAM)
  @Produces(MediaType.APPLICATION_JSON)
  Response call(InputStream image);
}

当我调用 call 方法并检查请求时,我看到 Key header 具有 ${api-key} 作为值,而不是我在application.properties 对于 api-key。

提前致谢。

根据微配置文件的文档,注释 ClientHeaderParam 不支持从配置中读取值。相反,我们可以通过某种实用程序 class 提供默认方法或静态方法。请参阅 https://download.eclipse.org/microprofile/microprofile-rest-client-1.2.1/apidocs/org/eclipse/microprofile/rest/client/annotation/ClientHeaderParam.html

处的 javadoc

以下是可能在您的上下文中使用的示例代码:

@RegisterRestClient(baseUri = "http://localhost:8000")
@ClientHeaderParam(name = "Key", value = "{getApiKey}")
@ClientHeaderParam(name = "api-key", value = "{getConfigValue}")
public interface MyRemoteService {

    default String getApiKey() {
        return ConfigProvider.getConfig().getValue("api-key",String.class);
    }

    default String getConfigValue(String key) {
        return ConfigProvider.getConfig().getValue(key,String.class);
    }

    @GET
    @Path("/hello")
    @Produces(MediaType.TEXT_PLAIN)
    String helloWithKeyHeader();
}

参考示例代码 https://github.com/gopinnath/quarkus-rest-example-parent

根据我在 github https://github.com/quarkusio/quarkus/discussions/24418

上得到的答案

问题与使用错误的依赖关系有关。我应该在使用 quarkus-rest-client 时使用 quarkus-rest-client-reactive。这实际上很奇怪,因为它与反应性或非反应性无关,但它就是这样。