6

サーバー側で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

だから質問:

  1. リンクヘッダーは正しくフォーマットされていますか?クライアント側でのリンクヘッダーの解析は少し混乱しているようです。
  2. これはこれを行うための正しい/受け入れられた方法ですか?ジャージー応答フィルターを調べましたが、モデルクラスにジャージー固有のアノテーションを追加する必要があります。これはやりたくありませんでした。
  3. 利用可能なページの総数はどうですか?情報でそれを与える標準化された方法はありますか?ページの合計があれば、おそらくrelリンクを完全に削除して、クライアント側で生成することができますか?それは正しいでしょうか?

ちなみに、リンクヘッダーのフォーマット全体はどのようにして生まれたのですか?「url;rel= name、url; rel = name」という形式は、私には少し奇妙に思えます。

編集:このhttps://www.rfc-editor.org/rfc/rfc5988#section-6.2を見つけました。これは、「標準」の関係名を指定します

4

1 に答える 1

0

これらのページを検索エンジンで取得できるようにしたい場合は、リンクを変更してクエリ文字列を削除することをお勧めします。

http://localhost:8880/rest/users/0

ここで、0 はサーバー側で目的のページ番号に解析されます。総ページ数に関しては、ユーザー リストの最後に到達したかどうかはサーバー上でわかります。その場合は、nextLink を省略してください。同様に、currentPage == 0 の場合は、prevLink を省略します。

ここで実際にこれを見ることができます: http://www.autoquoter.com/aq/en/Blog/Archives

于 2014-03-27T18:47:59.383 に答える