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();
}
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.
A Ordenação funciona da mesma maneira, passando um parâmetro na URL e definindo por qual atributo deve ser ordenado.
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);
}