在Jax-RS中,有一种方法可以获得标头值,而无需在每次调用中指定@HeaderParam

时间:2015-04-02 01:33:37

标签: java jax-rs

我知道每次通话都会有一定的标头值。我有一个构建响应并执行其他操作的BaseService,但它目前不会从任何内容继承。

我想在其中添加getHeaderValue()并在所有课程中提供它。有没有办法可以通过过滤器或其他东西来做到这一点?

1 个答案:

答案 0 :(得分:1)

我不知道这与杰克逊有什么关系。我假设您使用的是JAX-RS,因为这是我知道@HeaderParam存在的唯一地方。您可以做的是使用HttpHeaders。根据您使用的JAX-RS版本,实现方式会有所不同。这是JAX-RS 1.1 version,这里是JAX-RS 2.0 version。对您来说唯一真正感兴趣的是2.0版本有一个getHeaderString(String)方法,它返回一个String值。在1.1中,您需要使用getRequestHeader(String),它实际上会返回List<String>。原因是标题可能会出现多次。

在任何情况下,您都可以将HttpHeaders注入&#34; base&#34; / abstract资源类。然后只需要一个方法来获取一个cartain标头和/或一个接受String的方法,并允许调用者指定他们想要的标题。例如

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();
    }
}