UnmodifiableMultivaluedMap

UnmodifiableMultivaluedMap

我正在使用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上调用putUnmodifiableMultivaluedMap时,我会得到UnsupportedOperationException,因为它是“不可修改的”

那么可以修改UnmodifiableMultivaluedMap吗?也许还有另一种方法可以实现这一目标?

提前致谢。

最佳答案

您可以使用UriBuilder方法调用返回的requestContext.getUriInfo().getRequestUriBuilder()对象。它具有您需要的所有方法。
例如:-matrixParam(String name, Object... values) buildFromMap(Map<String,?> values)

09-11 09:42