gpt4 book ai didi

java - JAX-RS UriInfo.getQueryParameters() 返回 UnmodifiableMultivaluedMap

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:09 24 4
gpt4 key购买 nike

我正在使用 JAX-RS 创建 RESTful 网络服务。我创建了一个这样的 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 而不是多值 map

因此,当我在 UnmodifiableMultivaluedMap 上调用 replaceput 时,我得到了 UnsupportedOperationException,因为它是“不可修改”

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

提前致谢。

最佳答案

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

关于java - JAX-RS UriInfo.getQueryParameters() 返回 UnmodifiableMultivaluedMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40206548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com