javarest如何生成一个整体get过滤器

javarest如何生成一个整体get过滤器,java,rest,Java,Rest,我正在使用jersey 2和servlet 3编写REST服务。我有定制的GET方法,所有这些方法都首先查看请求是否有特定的头。如果标题不存在,我将抛出一个异常。有没有一种方法可以提供一个“类似父级”的@GET方法,该方法可以在没有特定头的请求进入相应的@Path链接之前拒绝它们?比如,如果我的服务有一个名称myService,并且@Path是“getHello”,那么在转到myService/getHello注释方法之前,如何首先检查头 您可以使用ContainerRequestFilter并

我正在使用jersey 2和servlet 3编写REST服务。我有定制的GET方法,所有这些方法都首先查看请求是否有特定的头。如果标题不存在,我将抛出一个异常。有没有一种方法可以提供一个“类似父级”的@GET方法,该方法可以在没有特定头的请求进入相应的@Path链接之前拒绝它们?比如,如果我的服务有一个名称myService,并且@Path是“getHello”,那么在转到myService/getHello注释方法之前,如何首先检查头

您可以使用
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
公共类CheckHeaderFilter实现ContainerRequestFilter{
@凌驾
公共无效筛选器(ContainerRequestContext上下文){
if(context.getMethod().toUpperCase().equals(“GET”)){
字符串头=context.getHeaderString(“SomeHeader”);
多值Map headers=context.getHeaders();
if(非有效领导){
abortWith(Response.status(400.entity(“Bad”).build());
//或抛出WebApplicationException
}
}
}
}
如果您正在使用包扫描来注册资源,那么由于
@Provider
注释的缘故,也应该选择并注册筛选器。否则,您需要自己注册

另请参见:


如果您使用的是Spring,您可以使用拦截器来验证您的头。您是否检查了-ContainerRequestFilter