1. ホーム
  2. spring

[解決済み] Spring Data Rest - 複数のプロパティでソートする

2023-03-24 07:36:18

質問

以下のようなエンティティがあります。

Class Person{
String id;
String name;
String numberOfHands;
}

Spring Data Rest (Gosling Release Train)で、指定するのは

localhost/Person?sort=name,asc

で名前の昇順でソートしています。さて、numberOfHandsの降順と名前の昇順でソートする必要がある場合です。という指定ができるようになりました。

localhost/Person?sort=numberOfHands,name,asc

という指定がありますが

localhost/Person?sort=numberOfHands,desc,name,asc

ソート順を複数指定する方法はありますか?

ありがとうございます。

どのように解決するのですか?

解決方法 (tl;dr)

複数のフィールドで並べ替えを行う場合、単純に sort パラメータを URI に複数回記述します。例えば your/uri?sort=name,asc&sort=numberOfHands,desc . Spring Dataは Pageable オブジェクトを複数のソートで構成することができます。

説明

URI のパラメータに複数の値を送信する方法については、実際には定義された標準がありません。参照 GETリクエストで同じパラメータ名に対して複数の値を渡す正しい方法 .

しかし Java サーブレット仕様 には、Java サーブレットコンテナがどのようにリクエストパラメータを解析するかのヒントとなる情報があります。

getParameterValues の配列を返します。 String オブジェクトの配列を返します。- Javaサーブレット仕様、セクション3.1

そのセクションのさらに上のサンプルでは、(リクエストデータとボディデータが混在していますが)次のように記述されています。

例えば、クエリ文字列が a=hello で、ポストボディが a=goodbye&a=world である場合、結果として得られるパラメータセットは次のようになります。 a=hello, goodbye, world .

このサンプルでは、パラメータ( a )が複数回提示された場合、その結果が集約されて String[] .