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!