サーバー側で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
だから質問:
- リンクヘッダーは正しくフォーマットされていますか?クライアント側でのリンクヘッダーの解析は少し混乱しているようです。
- これはこれを行うための正しい/受け入れられた方法ですか?ジャージー応答フィルターを調べましたが、モデルクラスにジャージー固有のアノテーションを追加する必要があります。これはやりたくありませんでした。
- 利用可能なページの総数はどうですか?情報でそれを与える標準化された方法はありますか?ページの合計があれば、おそらくrelリンクを完全に削除して、クライアント側で生成することができますか?それは正しいでしょうか?
ちなみに、リンクヘッダーのフォーマット全体はどのようにして生まれたのですか?「url;rel= name、url; rel = name」という形式は、私には少し奇妙に思えます。
編集:このhttps://www.rfc-editor.org/rfc/rfc5988#section-6.2を見つけました。これは、「標準」の関係名を指定します