使用 @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
。这实际上很奇怪,因为它与反应性或非反应性无关,但它就是这样。
我正在尝试使用 @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
。这实际上很奇怪,因为它与反应性或非反应性无关,但它就是这样。