【发布时间】: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