我正在使用JAX-RS
创建RESTful Web服务。
我创建了一个像这样的API:
GET /articles?userId=<userId>
UI调用此API,并传递编码的
userId
,例如:GET /articles?userId=dGVzdA
在后端中,我创建了Filter,它接受所有
QueryParam
-s(在这种情况下为userId),检查其是否有效,对其进行解码并传递给Controller
。public class MyFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) {
MultivaluedMap<String, String> queryParams = requestContext.getUriInfo().getQueryParameters();
//Checking if it's valid, decoding and some other stuff
....
queryParams.replace("userId", decodedUserId);
}
}
将
JAX-RS
版本升级到2.0后,我发现requestContext.getUriInfo().getQueryParameters()
返回UnmodifiableMultivaluedMap
而不是MultivaluedMap
。因此,当我在
replace
上调用put
或UnmodifiableMultivaluedMap
时,我会得到UnsupportedOperationException
,因为它是“不可修改的” 。那么可以修改
UnmodifiableMultivaluedMap
吗?也许还有另一种方法可以实现这一目标?提前致谢。
最佳答案
您可以使用UriBuilder
方法调用返回的requestContext.getUriInfo().getRequestUriBuilder()
对象。它具有您需要的所有方法。
例如:-matrixParam(String name, Object... values)
buildFromMap(Map<String,?> values)