【问题标题】:How to use UriBuilder.queryParam without encoding parameters?如何在没有编码参数的情况下使用 UriBuilder.queryParam?
【发布时间】:2018-08-08 09:53:20
【问题描述】:

我正在编写一个带有分页功能的 REST API 端点,我希望它包含指向第一页、上一页、下一页和最后一页的链接。我还希望这些链接包含原始请求中发送的任何参数(顺便说一句,这是个坏主意吗?)。

我正在使用 UriBuilder 类来创建这些链接。我的函数如下所示:

private static URI createUri(String endpoint, 
    MultivaluedMap<String, String> queryParameters) {
    final UriBuilder uriBuilder = UriBuilder.fromPath(endpoint);
    queryParameters.forEach(
        (key, valueList) -> valueList.forEach(
            value -> uriBuilder.queryParam(key, value)));
    return uriBuilder.build();
}

现在,我不希望对链接中的参数进行编码,因为任何将使用 API 的人都应该能够读取它们。问题是 UriBuilder.queryParam() 接缝始终对其进行编码。

我可以简单地将参数连接到端点,但我觉得这将是重新发明轮子。所以我想知道是否有更好的方法。

【问题讨论】:

  • 创建 URI 时,参数始终必须进行 URI 编码。否则,您将得不到有效的 URI - 例如,如果您的参数之一包含“/”。
  • 好的,也就是说,连接?
  • 因此,换句话说,如果您想拥有有效的链接,请将它们编码。没有编码的链接不是有效的链接。无法从有效服务器正确获取它们。不要连接 - 你不会得到一个 URI。

标签: java rest pagination uribuilder


【解决方案1】:
uriBuilder.build(false).toUriString()

【讨论】:

  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请编辑您的答案以添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多