我正在使用jersey 2和servlet 3编写REST服务。我有自定义GET方法,所有这些方法首先查看请求是否具有某些标头。如果标题不存在,我抛出异常。有没有办法提供像父母一样的" @GET方法,在进入相应的@Path-link之前拒绝某些标题的请求?比如,如果我的服务名为myService,而@Path是" getHello",那么在转到myService / getHello注释方法之前如何检查标头?
答案 0 :(得分:1)
您可以使用ContainerRequestFilter
并检查方法
@Provider
public class CheckHeaderFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext context) {
if (context.getMethod().toUpperCase().equals("GET")) {
String header = context.getHeaderString("SomeHeader");
MultivaluedMap<String, String> headers = context.getHeaders();
if(notValidHEaders) {
context.abortWith(Response.status(400).entity("Bad").build());
// or throw WebApplicationException
}
}
}
}
如果您使用包扫描来注册资源,则由于@Provider
注释,也应该选择并注册过滤器。否则,您需要自己注册
另见: