J'ai une entité comme ci-dessous
Class Person{
String id;
String name;
String numberOfHands;
}
Avec Spring Data Rest (Gosling Release Train), je peux spécifier
localhost/Person?sort=name,asc
pour trier nom nom croissant. Maintenant, dans un cas où je dois trier par nombreDeMoins décroissant et par nom croissant. Je suis capable de préciser
localhost/Person?sort=numberOfHands,name,asc
Mais je ne suis pas capable de spécifier
localhost/Person?sort=numberOfHands,desc,name,asc
Existe-t-il un moyen de spécifier plusieurs ordres de tri?
Merci!
Lorsque vous souhaitez trier plusieurs champs, il vous suffit de saisir plusieurs fois le paramètre sort
dans l'URI. Par exemple your/uri?sort=name,asc&sort=numberOfHands,desc
. Spring Data est alors capable de construire un objet Pageable
avec plusieurs tris.
Il n'y a pas vraiment de norme définie sur la manière de soumettre plusieurs valeurs pour un paramètre dans un URI. Voir Manière correcte de transmettre plusieurs valeurs pour le même nom de paramètre dans la requête GET .
Cependant, Java Servlet Spec contient des informations indiquant comment Java les conteneurs de servlets analysent les paramètres de requête.
La méthode
getParameterValues
renvoie un tableau d'objetsString
contenant toutes les valeurs de paramètre associées à un nom de paramètre. ... - Spécification Java Servlet, section 3.1
L’échantillon plus loin dans cette section indique (bien qu’il mélange les données de requête et de corps)
Par exemple, si une requête est faite avec une chaîne de requête de
a=hello
et un corps de message dea=goodbye&a=world
, le jeu de paramètres résultant serait ordonnéa=hello, goodbye, world
.
Cet exemple montre que lorsqu'un paramètre (a
dans l'exemple) est présenté plusieurs fois, les résultats sont agrégés dans un String[]
.
Voici comment construire l'objet multi-tri manuellement/par programme.
Sort sort = Sort.by(
Sort.Order.asc("name"),
Sort.Order.desc("numberOfHands"));
return personRepository.findAll(sort);
Remarque: cette solution ne résout pas directement la question initiale posée, mais peut aider les visiteurs qui ont atterri sur cette question tout en cherchant une solution, comment trier sur plusieurs propriétés à partir d'une perspective dorsale/de manière quelque peu "codée en dur". (cette solution ne nécessite/prend aucun paramètre d'URI)