只想通过我在服务器端使用 Jersey 和在客户端使用 JQuery 的分页方法运行。
在服务器上(假设用户刚刚请求 /rest/users?page=1):
// Hardcoded the page number here, but it would be page-1, page+1
String prevLink = uriInfo.getRequestUri() + "?page=0";
String nextLink = uriInfo.getRequestUri() + "?page=2";
String linkHeader = String.format(LINK_HEADER_TMPL, prevLink, nextLink);
return List<User> currentPageResults;
这在响应中为我提供了以下标头:
Link: <http://localhost:8880/rest/users?page=0>; rel="prev", <http://localhost:8880/rest/users?page=2>; rel="next"
在客户端:
var xhr = $.getJSON("rest/users", function(allData) {
var links = (xhr.getResponseHeader("link")).split(',');
var relLinks = [];
$.each(links, function(index, value) {
var parts = value.split(';');
var url = parts[0].replace(/^.*<(.*)>.*$/m, '$1');
var rel = parts[1].replace(/^.*"(.*)".*$/m, '$1');
relLinks[rel] = url;
});
alert(relLinks['prev']);
警报给了我正确的东西,并且是我用来生成我的页面链接的东西:
http://localhost:8880/rest/users?page=0
所以问题:
- 我的链接标题格式是否正确?在客户端解析链接头似乎有点令人费解。
- 这是一种正确/可接受的方式吗?我查看了 Jersey 响应过滤器,但这需要在模型类上添加特定于 Jersey 的注释,而我不想这样做。
- 那么总可用页面呢?是否有标准化的方式在信息中给出它?如果我有页面总数,我大概可以完全删除 rel 链接,并在客户端生成它们?那会是正确的吗?
顺便说一句,链接头的整个格式是如何产生的?“url; rel=name,url;rel=name”的形式对我来说似乎有点奇怪。
编辑:找到这个https://www.rfc-editor.org/rfc/rfc5988#section-6.2,它指定了“标准”关系名称