OpenAPI 生成器 - Java 11 本机 HTTP 客户端模板:如何添加自定义标头

问题描述 投票:0回答:2

我正在使用 OpenAPI Generator 为符合 swagger 标准的服务生成 Java 11 HTTP 客户端。

问题是:该服务需要基本身份验证,但它不会使用

WWW-Authenticate
标头向客户端发起挑战,因此 Java 11 HTTP 客户端不会发送使用构建器配置的基本身份验证。解决方法是直接在请求中添加
Authorization
标头,如 this thread 中所建议。

现在:从版本 4.3.1 开始,OpenAPI Generator 不会向我公开自定义 HTTP 请求的接口,所以我想知道是否最好覆盖负责的模板(api.mustache:126)或如果有更清洁的替代方案来完成此任务。

java openapi-generator
2个回答
3
投票

我遇到了与您相同的问题,我的解决方案是使用生成的

ApiClient
类及其
RequestInterceptor
字段。它允许在将请求发送到服务器之前自定义请求标头:

ApiClient client = new ApiClient();
client.setRequestInterceptor(new Consumer<HttpRequest.Builder>() {
  @Override
  public void accept(HttpRequest.Builder builder) {
    builder.header("Authorization", "Basic " + Base64.getEncoder().encodeToString("foo:bar"));
  }
});

如果您需要捕获回复标头,还有一个名为响应拦截器的支持版本。


0
投票

我开始使用

native
库生成并遇到了同样的问题 你应该使用
setRequestInterceptor
方法 您可以传递 lambda 函数,而不是使用匿名类

String access_token = System.getenv("access_token");
ApiClient client = new ApiClient();
client.setRequestInterceptor(r -> r.header("Authorization", "Bearer " + access_token));
© www.soinside.com 2019 - 2024. All rights reserved.