Como eu faria o equivalente a /?sort=especialidade,asc&sort=nome,desc
no @PageableDefault()?
Como eu faria o equivalente a /?sort=especialidade,asc&sort=nome,desc
no @PageableDefault()?
Olá, Rafael! Tudo bem?
Você pode passar mais de um campo para o atributo sort
na anotação @PageableDefault
. Por exemplo, se você deseja ordenar por especialidade
de forma ascendente e por nome
de forma descendente, você pode fazer isso da seguinte maneira:
@PageableDefault(sort = {"especialidade", "nome"}, direction = Sort.Direction.ASC)
Pageable pageable
No entanto, note que isso ordenará ambos os campos na mesma direção, ou seja, ambos em ordem ascendente. Infelizmente, a anotação @PageableDefault
não suporta direções de ordenação diferentes para cada campo.
Se você precisar de uma ordenação mais complexa, como especialidade
em ordem ascendente e nome
em ordem descendente, você terá que implementar isso manualmente. Uma maneira de fazer isso é receber os parâmetros de ordenação como String
no seu método e construir o objeto Pageable
manualmente.
Aqui está um exemplo de como você pode fazer isso:
public Page<Medico> lista(@RequestParam(required = false, defaultValue = "0") int page,
@RequestParam(required = false, defaultValue = "10") int size) {
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC, "especialidade"));
orders.add(new Sort.Order(Sort.Direction.DESC, "nome"));
Pageable pageable = PageRequest.of(page, size, Sort.by(orders));
return medicoService.findAll(pageable);
}
Espero ter ajudado e bons estudos!