form docs spring spring-data spring-data-jpa spring-data-rest

docs - Spring Data Rest-Ordenar por mĂșltiples propiedades



form:form spring (2)

Solución (tl; dr)

Cuando desee clasificar en varios campos, simplemente coloque el parámetro de sort varias veces en el URI. Por ejemplo, your/uri?sort=name,asc&sort=numberOfHands,desc . Spring Data es capaz de construir un objeto Pageable con múltiples clasificaciones.

Explicación

Realmente no existe un estándar definido sobre cómo enviar múltiples valores para un parámetro en un URI. Consulte la forma correcta de pasar varios valores para el mismo nombre de parámetro en la solicitud GET .

Sin embargo, hay algo de información en la especificación de servlet de Java que sugiere cómo los contenedores de servlet de Java analizan los parámetros de solicitud.

El método getParameterValues devuelve una matriz de objetos String que contienen todos los valores de parámetros asociados con un nombre de parámetro. ... - Java Servlet Spec, sección 3.1

El ejemplo más adelante en esa sección indica (aunque combina datos de solicitud y cuerpo)

Por ejemplo, si se realiza una solicitud con una cadena de consulta de a=hello y un cuerpo de publicación de a=goodbye&a=world , el conjunto de parámetros resultante se ordenaría a=hello, goodbye, world .

Este ejemplo muestra que cuando se presenta un parámetro ( a en el ejemplo) varias veces, los resultados se agregarán a una String[] .

Tengo una entidad como abajo

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

Con Spring Data Rest (Gosling Release Train), puedo especificar

localhost/Person?sort=name,asc

para ordenar nombre nombre ascendente. Ahora, en un caso en el que necesito ordenar por número, descendiendo y nombrando ascendente. Soy capaz de especificar

localhost/Person?sort=numberOfHands,name,asc

Pero, no puedo especificar

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

¿Hay una manera de especificar el orden múltiple?

¡Gracias!


Aquí es cómo construir el objeto de ordenación múltiple manualmente / programáticamente.

Sort sort = Sort.by( Sort.Order.asc("name"), Sort.Order.desc("numberOfHands")); return personRepository.findAll(sort);