Java Rest如何制作整体获取过滤器

时间:2016-11-09 03:48:20

标签: java rest

我正在使用jersey 2和servlet 3编写REST服务。我有自定义GET方法,所有这些方法首先查看请求是否具有某些标头。如果标题不存在,我抛出异常。有没有办法提供像父母一样的" @GET方法,在进入相应的@Path-link之前拒绝某些标题的请求?比如,如果我的服务名为myService,而@Path是" getHello",那么在转到myService / getHello注释方法之前如何检查标头?

1 个答案:

答案 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注释,也应该选择并注册过滤器。否则,您需要自己注册

另见: