在 Jax-RS 中有没有一种方法可以获得 header 值而不必在每次调用中指定 @HeaderParam

In Jax-RS is there a way to get a header value without having to specify @HeaderParam in every call

我知道每次通话都会有一定的header价值。我有一个 BaseService 可以构建响应并做其他事情,但是它目前没有继承任何东西。

我想将 getHeaderValue() 添加到它并使其在所有 类 中可用。有什么方法可以通过过滤器或其他方式做到这一点吗?

我不知道这与杰克逊有什么关系。我假设您正在使用 JAX-RS,因为这是我知道 @HeaderParam 存在的唯一地方。 您可以做的是利用 HttpHeaders。根据您使用的 JAX-RS 版本,实现会略有不同。这里是JAX-RS 1.1 version, and here is JAX-RS 2.0 version. The only thing really of interest that may matter to you is that the 2.0 version has a getHeaderString(String) method that returns a single String value. In 1.1, you will need to make use of getRequestHeader(String),实际上是returns一个List<String>。原因是一个header可能出现不止一次

在任何情况下,您都可以将 HttpHeaders 注入到您的 "base"/抽象资源 class 中。然后只需要一个方法来获取 cartain header and/or 一个接受字符串并允许调用者指定他们想要的 header 的方法。例如

public abstract class BaseResource<T> {
    @Context
    protected HttpHeaders headers;

    protected String getCertainHeader() {
        return headers.getHeaderString("Certain-Header");
    }

    protected String getHeader(String headerName) {
        return headers.getHeaderString(headerName);
    }
}

@Path("/foo")
public class FooResource extends BaseResource<Foo> {

    @GET
    public Response getSomething() {
        String certainHeader = getCertainHeader();
    }
}