Jersey过滤器、
过滤器可以修改入站和出站请求和响应包括标题的修改,实体等的请求/响应参数。
例如用来操纵请求和响应参数像HTTP头,URI和/或HTTP方法.
服务器过滤主要有两个接口:
ContainerRequestFilter 过滤请求前
ContainerResponseFilter 一个是过滤请求后
1.ContainerResponseFilter
这个是请求结束后响应回复阶段过滤,很简单,有什么参数直接加个断点就能查看到了,同样要使用注解,让jersey认为该类为其一个处理器.
/**
* 对于response的过滤器
* 过滤器主要是用来操纵请求和响应参数像HTTP头,URI和/或HTTP方法
*/
@Provider
public class ResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext,
ContainerResponseContext containerResponseContext) throws IOException {
/**
* 具体可以获取什么参数,加个断点就可以看到了
*/
System.out.println("执行回复过滤");
}
}
2.ContainerRequestFilter
注解有@PreMatching和@Provider,经测试,前者只要收到请求就开始执行,后者是收到请求,匹配到相应的处理方法后执行,也就是前者匹配前,后者匹配后执行.
/**
* 对于request的过滤器
* 过滤器主要是用来操纵请求和响应参数像HTTP头,URI和/或HTTP方法
* @author Niu Li
* @date 2016/7/27
* Provider //这个是匹配后增加参数或者减少参数
*/
@PreMatching //不知道为什么和后请求过滤器冲突,不能同时使用
public class PreRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
/**
* 具体可以获取什么参数,加个断点就可以看到了
*/
System.out.println("PreRequestFilter");
}
}
注:启动过滤器需要注册RESTApplication
public class RESTApplication extends ResourceConfig {
public RESTApplication() {
//想让jersey托管的部分需要加入扫描,或者使用register指定托管类也可以
packages("com.haikong.resources","com.haikong.exception");
register(LoggingFilter.class);
register(JacksonJsonProvider.class);
//注册过滤器,扫包对@PreMatching注解无用,只能手动加入
register(PreRequestFilter.class);
register(ResponseFilter.class);
/**
* 对于链接,先执行请求过滤,有异常则执行异常过滤,最后执行回复过滤
*/
System.out.println("加载RESTApplication");
}
}
来自:http://blog.csdn.net/u012706811/article/details/52054157
资源实例下载:http://download.csdn.NET/detail/sotong006/9913077