Resteasy如何更新/添加查询参数?

Posted

技术标签:

【中文标题】Resteasy如何更新/添加查询参数?【英文标题】:Resteasy how to update/add query parameter? 【发布时间】:2019-01-11 07:25:36 【问题描述】:

在resteasy的旧版本[3.0.7]中,我们可以更新查询参数

requestContext.getUriInfo().getQueryParameters()
                        .add("limit", recordLimit);

但是在使用版本[3.5.1]更新后,上面的代码会抛出UnmodifiableMultivaluedMap的错误

然后试着写了这段代码

UriBuilder  uriBuilder = requestContext.getUriInfo().getRequestUriBuilder();
uriBuilder.queryParam("limit", recordLimit);

以及下面的代码

UriBuilder  uriBuilder = requestContext.getUriInfo().getRequestUriBuilder();
uriBuilder.matrixParam("limit", recordLimit);

谁能解释一下更新查询参数的正确方法是什么?

编辑 1:即使这样也行不通

UriBuilder  uriBuilder = requestContext.getUriInfo().getRequestUriBuilder();
uriBuilder.replaceQueryParam( "limit", recordLimit);

【问题讨论】:

只是出于好奇,您为什么要更新查询参数? 实际上在我们的例子中,limit 会告诉用户一次要获取多少条记录,如果用户不会在 url 中给出这个值,那么我们将从属性文件中选择这个值并获取那么多记录一口气。 【参考方案1】:

最后我找到了解决方案,在旧版本中,我们正在做类似的事情来动态添加查询参数

requestContext.getUriInfo().getQueryParameters()
                        .add("limit", recordLimit);

但在 3.5.1 版本中,它是一个 MultiMap,因此上述场景不允许,所以这是实现此目的的新方法

UriBuilder  uriBuilder = requestContext.getUriInfo().getRequestUriBuilder() ;
uriBuilder.queryParam("limit", recordLimit);
requestContext.setRequestUri(uriBuilder.build());

【讨论】:

以上是关于Resteasy如何更新/添加查询参数?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Rest中@Context UriInfo的等价物是什么

REST & RESTEasy

是否可以使用 Resteasy 发布 byte[] 来调用 rest api?

RESTEasy 与 Apache Ant

RESTEasy中的通用异常处理ExceptionMapper

在 dstore/Rest 请求中添加查询参数