gpt4 book ai didi

java - Quarkus & Microprofile : Is there a better way to use a property from application. 属性进入@ClientHeaderParam?

转载 作者:行者123 更新时间:2023-12-01 11:55:38 27 4
gpt4 key购买 nike

我正在尝试构建一个使用 quarkus-rest-client 调用 API 的简单应用程序。 .
我必须注入(inject)一个 API key 作为 header ,该 header 对于 API 的所有资源都是相同的。
所以我想把这个 API Key 的值(取决于环境 dev/qa/prod )放在 application.properties文件位于 src/main/resources .

我尝试了不同的方法来实现这一点:

  • 直接使用com.acme.Configuration.getKey进入 @ClientHeaderParam值(value)属性
  • 创建一个实现 ClientHeadersFactory 接口(interface)的 StoresClientHeadersFactory 类来注入(inject)配置

  • 最后,我找到了下面描述的方法来使它工作。

    我的问题是 : 有没有更好的方法?

    这是我的代码:
  • StoreService.java 这是我的客户端访问 API

  • @Path("/stores")
    @RegisterRestClient
    @ClientHeaderParam(name = "ApiKey", value = "{com.acme.Configuration.getStoresApiKey}")
    public interface StoresService {

    @GET
    @Produces("application/json")
    Stores getStores();

    }
  • 配置.java

  • @ApplicationScoped
    public class Configuration {

    @ConfigProperty(name = "apiKey.stores")
    private String storesApiKey;

    public String getKey() {
    return storesApiKey;
    }

    public static String getStoresApiKey() {
    return CDI.current().select(Configuration.class).get().getKey();
    }

    }
  • StoresController.java 这是 REST Controller

  • @Path("/stores")
    public class StoresController {

    @Inject
    @RestClient
    StoresService storesService;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Stores getStores() {
    return storesService.getStores();
    }

    }

    最佳答案

    聚会迟到了,但把它放在这里供我自己引用。使用@ClientHeaderParam 和@HeaderParam 似乎有区别,所以我进一步调查了一下:
    根据Microprofile docs ,您可以将计算方法放在花括号中。该方法可以提取属性值。

    有关更多示例,请参见链接。

    编辑:我想出的类似于原来的,但在界面上使用默认方法,所以你至少可以丢弃 Configuration 类。此外,使用 org.eclipse.microprofile.config.Config 和 ConfigProvider 类来获取配置值:

    @RegisterRestClient
    @ClientHeaderParam(name = "Authorization", value = "{getAuthorizationHeader}")
    public interface StoresService {

    default String getAuthorizationHeader(){
    final Config config = ConfigProvider.getConfig();
    return config.getValue("apiKey.stores", String.class);
    }

    @GET
    @Produces("application/json")
    Stores getStores();

    关于java - Quarkus & Microprofile : Is there a better way to use a property from application. 属性进入@ClientHeaderParam?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558635/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com