我知道每次通话都会有一定的标头值。我有一个构建响应并执行其他操作的BaseService,但它目前不会从任何内容继承。
我想在其中添加getHeaderValue()
并在所有课程中提供它。有没有办法可以通过过滤器或其他东西来做到这一点?
答案 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();
}
}