是否可以在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);
此标头将由客户端的拦截器添加,因此客户端代码不知道放在这里的内容,这不应该是显式的方法参数。
答案 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();
}
}
希望它能回答你的问题。 亨利