Para criar mapear uma requisição GET, é utilizado a anotação @GetMapping.

@GetMapping
    public List<DadosListagemMedico> listar(){
        return medicoRepository.findAll().stream().map(DadosListagemMedico::new).toList();
    }

Untitled

Paginação

Limita a quantidade de registros devolvidos em uma requisição.

O Spring Data já oferece um objeto que abstrai essa lógica de paginação, através da interface Pageable. Ao passar esse objeto para o método findAll(), é retornado um objeto Page, que contém os dados do Genérico passado e informações sobre a paginação.

@GetMapping
    public Page<DadosListagemMedico> listar(Pageable pageable){
        return medicoRepository.findAll(pageable).map(DadosListagemMedico::new);
    }
{
    "content": [
        {
            "nome": "Rodrigo Ferreira",
            "email": "rodrigo.ferreira@voll.med",
            "crm": "123456",
            "especialidade": "ORTOPEDIA"
        },
        {
            "nome": "Carla Azevedo",
            "email": "carla.azevedo@voll.med",
            "crm": "547852",
            "especialidade": "CARDIOLOGIA"
        }
    ],
    "pageable": {
        "sort": {
            "empty": true,
            "sorted": false,
            "unsorted": true
        },
        "offset": 0,
        "pageNumber": 0,
        "pageSize": 20,
        "unpaged": false,
        "paged": true
    },
    "last": true,
    "totalPages": 1,
    "totalElements": 2,
    "size": 20,
    "number": 0,
    "sort": {
        "empty": true,
        "sorted": false,
        "unsorted": true
    },
    "first": true,
    "numberOfElements": 2,
    "empty": false
}

Com a paginação implementada, o cliente da API consegue determinar a quantidade de registros, qual página e outros atributos do objeto Page, customizando a resposta da requisição.

Untitled

A Ordenação funciona da mesma maneira, passando um parâmetro na URL e definindo por qual atributo deve ser ordenado.

Untitled

Para definir um padrão, é utilizado a anotação @PageableDefault passando parâmetros para os atributos do objeto Page.

@GetMapping
    public Page<DadosListagemMedico> listar(@PageableDefault(size = 10, sort={"nome"}) Pageable pageable){
        return medicoRepository.findAll(pageable).map(DadosListagemMedico::new);
    }

O que foi aprendido?