如何将动态标头值传递到 Micronaut 声明性 HTTP 客户端?

pyR*_*bit 4 micronaut

我想利用 Micronaut 的“声明式 HTTP 客户端”功能。我很难理解如何传递动态标头值,并且想知道这是否可能。考虑以下示例:

package com.example;

import io.micronaut.http.annotation.Header;
import io.micronaut.http.client.annotation.Client;
import java.util.ArrayList;

@Client("${my.api.host}")
@Header(name = "Auth-Header", value = "<This needs to be dynamic>")
public interface MyApiClient {
    public ArrayList<Dog> getDogs();
}
Run Code Online (Sandbox Code Playgroud)

如何使我的标头值动态[非静态]?

cgr*_*rim 11

声明性客户端中的动态标头可以在方法参数级别定义。请参阅下面的示例:

@Client("${my.api.host}")
interface LocalhostClient {
    @Get
    List<String> getDogs(@Header(name = "Authorization") String authorization);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用适当的Authorization标头值调用客户端方法,如下所示:

var dogs = client.getDogs("Bearer some-token");
Run Code Online (Sandbox Code Playgroud)

  • `List&lt;String&gt; getDogs(@Header(name = "Authorization") Stringauthorization);` - 在该特定示例中,我认为 `name="Authorization"` 是可选的。默认情况下,名称将是参数名称,在本例中为“authorization”。指定名称的常见用例是标头名称需要包含连字符,例如“public String someMethodName(@Header("Content-Type") String contentType)”。 (2认同)
  • 更新。基本上,“name =”和“value =”在类级注释与方法参数级注释上的工作方式不同,这实际上记录在 Header 类的代码注释中。仔细阅读:https://github.com/micronaut-projects/micronaut-core/blob/3.2.x/http/src/main/java/io/micronaut/http/annotation/Header.java#L60 (2认同)