JAXRS CXF - 获取http标头而不指定方法参数

时间:2015-03-17 15:12:35

标签: java rest http-headers cxf jax-rs

是否可以在JAXRS资源方法中检索http标头而无需将这些标头明确指定为方法参数?

例如,我有一个以下界面:

@Path("/posts")
public interface PostsResource {

  @GET
  public List<Post> getAllPosts();
}

以及实现此接口的以下类:

public class PostsResourceImpl implements PostsResource {

  @Autowired
  private PostsService postsService;

  public List<Post> getAllPosts() {
    return postsService.getAllPosts();
  }

}

我不想将我的方法签名更改为:

public List<Post> getAllPosts(@HeaderParam("X-MyCustomHeader") String myCustomHeader);

此标头将由客户端的拦截器添加,因此客户端代码不知道放在这里的内容,这不应该是显式的方法参数。

1 个答案:

答案 0 :(得分:6)

您可以在资源中注入类型为HttpHeaders的对象作为类变量,以访问请求标头,如下所述:

@Path("/test")
public class TestService {
    @Context
    private HttpHeaders headers;

    @GET
    @Path("/{pathParameter}")
    public Response testMethod() {
        (...)
        List<String> customHeaderValues = headers.getRequestHeader("X-MyCustomHeader");
        System.out.println(">> X-MyCustomHeader = " + customHeaderValues);
        (...)

        String response = (...)
        return Response.status(200).entity(response).build();
    }
}

希望它能回答你的问题。 亨利