gpt4 book ai didi

java - Quarkus Rest Client 不在 ClientHeadersFactory 的实现中注入(inject) ConfigProperty

转载 作者:行者123 更新时间:2023-12-05 07:04:07 27 4
gpt4 key购买 nike

描述错误我正在使用 MP Rest Client 从我的服务实现中调用另一个 Rest 服务,并希望通过使用 @ClientsHeadersFactory 覆盖一些 header 属性,但是当我使用 @Inject 来使用另一个 CDI Bean 然后引发 NullpointerException。使用 Micro Profile Rest Client 1.4,如果您的实现由 CDI 管理,则可以使用“@Inject”。例如,这允许您注入(inject) secret 或任何其他 CDI bean 来计算 header 值。

预期行为注入(inject)的 ConfigProperty 可用且不为空

实际行为NullpointerException发生在ClientHeadersFactory实现的update方法中。

复制重现该行为的步骤:

  1. 创建ClientHeadersFactory的实现类并覆盖更新方法
@ApplicationScoped
public class MyClientHeadersFactory implements ClientHeadersFactory {


@Inject
@ConfigProperty(name = "secrets.value")
private String secretValue;

@Override
public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders, MultivaluedMap<String, String> clientOutgoingHeaders) {

System.out.println("--- Incoming headers of the JAX-RS environment");
incomingHeaders.forEach((k, v) -> System.out.println(k + ":" + v));

System.out.println("--- Specified outgoing headers of the Rest Client");
clientOutgoingHeaders.forEach((k, v) -> System.out.println(k + ":" + v));


MultivaluedMap<String, String> resultHeader = new MultivaluedHashMap();
resultHeader.putAll(incomingHeaders);
resultHeader.putAll(clientOutgoingHeaders);

//here is the NullpointerException raised
resultHeader.add("X-Secret-Header", secretValue);

System.out.println("--- Header of the Rest Client after merging");
resultHeader.forEach((k, v) -> System.out.println(k + ":" + v));

return resultHeader;
}

}

  1. 使用 @RegisterClientHeaders()
  2. 在 Rest Client 接口(interface)中注册您实现的 ClientHeadersFactory
@RegisterRestClient(configKey = "remote-restservice")
@RegisterClientHeaders(MyClientHeadersFactory.class)
public interface RemoteRestService
{

@POST
@Path("/doSomeStuff")
@Consumes({ "application/json" })
@Produces({ "application/json" })
Response createStuff( @Valid Stuff stuff);
}

配置

# Add your application.properties here, if applicable.
remote-restservice/mp-rest/url=http://localhost:9090/service
secrets.value=test

截图(如果适用,请添加屏幕截图以帮助解释您的问题。)

环境(请填写以下信息):

  • uname -aver 的输出:
  • java -version 的输出:
  • GraalVM 版本(如果不同于 Java):
  • Quarkus 版本或 git rev:1.5.2-FINAL
  • 构建工具(即 mvnw --versiongradlew --version 的输出):

其他上下文(在此处添加有关该问题的任何其他上下文。)

最佳答案

我有同样的问题,它已在 Quarkus 1.8 中修复。

关于java - Quarkus Rest Client 不在 ClientHeadersFactory 的实现中注入(inject) ConfigProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010180/

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