JAXRS CXF - 获取 http headers 而不指定为方法参数

JAXRS CXF - get http headers without specifying as method parameters

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

例如我有如下界面:

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

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

和以下实现此接口的class:

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

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

您可以在资源中注入 HttpHeaders 类型的 object 作为 class 变量来访问请求 headers,如下所述:

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

希望它能回答您的问题。 蒂埃里