私は以下のようなエンティティを持っています
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
複数のソート順を指定する方法はありますか?
ありがとう!
複数のフィールドでソートする場合は、sort
パラメーターをURIに複数回入力するだけです。たとえば、your/uri?sort=name,asc&sort=numberOfHands,desc
。その後、Spring Dataは、複数のソートを使用してPageable
オブジェクトを構築できます。
URIのパラメーターに複数の値を送信する方法については、実際に定義された標準はありません。 GET要求で同じパラメーター名に複数の値を渡す正しい方法 を参照してください。
ただし、 Java Servlet Spec には、Javaサーブレットコンテナがリクエストパラメータを解析する方法に関するヒントがあります。
getParameterValues
メソッドは、パラメーター名に関連付けられたすべてのパラメーター値を含むString
オブジェクトの配列を返します。 ...-Javaサーブレット仕様、セクション3.1
そのセクションのサンプルには、さらに記載されています(ただし、リクエストとボディデータが混在しています)
たとえば、
a=hello
のクエリ文字列とa=goodbye&a=world
の投稿本文でリクエストが行われた場合、結果のパラメーターセットはa=hello, goodbye, world
の順序になります。
このサンプルは、パラメーター(例ではa
)が複数回提示されると、結果がString[]
に集約されることを示しています。
これは、手動/プログラムで複数のSortオブジェクトを作成する方法です。
Sort sort = Sort.by(
Sort.Order.asc("name"),
Sort.Order.desc("numberOfHands"));
return personRepository.findAll(sort);
注:このソリューションは、元の質問を直接解決するものではありませんが、バックエンドの観点からやや「ハードコード化された」方法で複数のプロパティをソートする方法を探しているときにこの質問に到達した訪問者を助けることができます。 (このソリューションは、URIパラメーターを必要としない/取らない)