在 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();
}
}
我知道每次通话都会有一定的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();
}
}