Rest 在Jersey中的requestURI中包括默认查询参数值(如果省略)

Rest 在Jersey中的requestURI中包括默认查询参数值(如果省略),rest,jersey,jax-rs,Rest,Jersey,Jax Rs,如果省略了查询参数“x”,有没有办法让它以默认值包含在URL中,因为目前我需要做的是以下操作,并且我必须为每个具有默认值的参数都这样做;有更好的方法吗?我使用的是Jersey版本1.12 public Response getResponse(@DefaultValue("test") @QueryParam("x") String x) UriBuilder uriBuilder = UriBuilder.fromUri(uriInfo.getReque

如果省略了查询参数“x”,有没有办法让它以默认值包含在URL中,因为目前我需要做的是以下操作,并且我必须为每个具有默认值的参数都这样做;有更好的方法吗?我使用的是Jersey版本1.12

    public Response getResponse(@DefaultValue("test") @QueryParam("x") String x)
                UriBuilder uriBuilder = UriBuilder.fromUri(uriInfo.getRequestUri());
                uriBuilder = uriBuilder.replaceQueryParam(x);
                QueryContext.setUrl(uriBuilder.build().toString());

谢谢

我不知道标准的Jersey方法可以做到这一点,但您可以使用AOP截取该方法并执行以下操作:

公共类UpdateQueryParamInterceptor实现MethodInterceptor{
公共对象调用(MethodInvocation方法)抛出可丢弃的{
UriBuilder=null;
for(对象arg:method.getArguments()){
if(arg instanceof UriInfo){
UriInfo信息=(UriInfo)参数;
builder=UriBuilder.fromUri(info.getRequestUri());
}
}
Annotation[][]annotations=method.getMethod().getParameterAnnotations();
for(int i=0;i0){
DefaultValue def=null;
QueryParam param=null;
for(注释:注释[i]){
if(默认值的注释实例){
def=(默认值)注释;
}else if(QueryParam的注释实例){
param=(QueryParam)注释;
}
}
if((null!=def)&(null!=param)){
builder=builder.replaceQueryParam(param.value(),method.getArguments()[i]);
}
}
}
//使用builder.build().toString()执行某些操作;
返回方法。继续();
}
}
我不确定您的代码中有什么
QueryContext
类,但您也可以在方法中找到它,并在拦截器中执行
setUrl
方法