2014-09-24 84 views
0

我有以下形式的REST服务:JAXRS queryparam未加载拦截

@GET 
@NeedsInterception 
public void getSomething(@QueryParam("xxx") @MyAnnotation String thing) { 
    //Stuff 
} 

我然后有一个拦截对于@NeedsInterception

其中,我对@MyAnnotation注释的元素执行一些逻辑。

但是,当调用拦截器时,MethodInvocation对象尚未使用QueryParam的值解析,而是总是使用"";

解决QueryParam问题后,我是否有办法让拦截发生?

回答

0

不知道你正在使用哪一种拦截器,但jax-rs ReaderInterceptor打算将呼叫打包到MessageBodyReader.readFrom。由于您没有发送请求正文,因此请求中不会使用这种拦截器。

一个ContainerRequestFilter应该有所帮助:

@Provider 
public class SomeFilter implements ContainerRequestFilter { 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     MultivaluedMap<String,String> queryParameters = requestContext.getUriInfo().getQueryParameters(); 
    } 

} 
+0

如果添加查询参数containerRequestContext,那么参数应该是通过调用ReaderInterceptorContext的getProperty(......)拦截器可用。 – Claude 2015-10-06 09:25:54