Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sort por especialidade e nome no @PageableDefault();

Como eu faria o equivalente a /?sort=especialidade,asc&sort=nome,desc no @PageableDefault()?

1 resposta
solução!

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.