Ich habe eine Entität wie unten
Class Person{
String id;
String name;
String numberOfHands;
}
Mit Spring Data Rest (Gosling Release Train) kann ich angeben
localhost/Person?sort=name,asc
um den Namen aufsteigend zu sortieren. Nun, in einem Fall, in dem ich nach numberOfHands absteigend und name aufsteigend sortieren muss. Ich kann angeben
localhost/Person?sort=numberOfHands,name,asc
Aber ich kann es nicht spezifizieren
localhost/Person?sort=numberOfHands,desc,name,asc
Gibt es eine Möglichkeit, mehrere Sortierreihenfolgen anzugeben?
Vielen Dank!
Wenn Sie nach mehreren Feldern sortieren möchten, geben Sie den Parameter sort
einfach mehrmals in die URI ein. Zum Beispiel your/uri?sort=name,asc&sort=numberOfHands,desc
. Spring Data kann dann ein Pageable
-Objekt mit mehreren Sortierungen erstellen.
Es gibt keinen definierten Standard für die Übermittlung mehrerer Werte für einen Parameter in einem URI. Siehe Richtige Methode zum Übergeben mehrerer Werte für denselben Parameternamen in der GET-Anforderung .
Es gibt jedoch einige Informationen in der Java Servlet Spec , die darauf hinweisen, wie Java Servlet-Container Anforderungsparameter analysieren.
Die Methode
getParameterValues
gibt ein Array vonString
Objekten zurück, die alle Parameterwerte enthalten, die einem Parameternamen zugeordnet sind. ... - Java Servlet Spec, Abschnitt 3.1
Das Beispiel in diesem Abschnitt gibt an (obwohl es Anforderungs- und Textdaten mischt)
Wenn beispielsweise eine Anfrage mit einer Abfragezeichenfolge von
a=hello
Und einem Post-Body vona=goodbye&a=world
Gestellt wird, wird der resultierende Parametersatz nacha=hello, goodbye, world
Sortiert.
Dieses Beispiel zeigt, dass bei mehrfacher Darstellung eines Parameters (a
im Beispiel) die Ergebnisse zu einem String[]
Aggregiert werden.
Hier erfahren Sie, wie Sie das Multi-Sort-Objekt manuell/programmatisch erstellen.
Sort sort = Sort.by(
Sort.Order.asc("name"),
Sort.Order.desc("numberOfHands"));
return personRepository.findAll(sort);
Hinweis: Diese Lösung löst nicht direkt die ursprüngliche Frage, kann jedoch Besuchern helfen, die auf diese Frage gestoßen sind, während sie nach einer Lösung suchen, wie mehrere Eigenschaften aus einer Back-End-Perspektive/auf eine etwas "hardcodierte" Weise sortiert werden können. (Für diese Lösung sind keine URI-Parameter erforderlich/erforderlich)