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

Pageable nao funcionando no swagger

Percebi que com o uso do swagger os parametros de pageable gerados na url sao diferentes. Ao inves de "page" ele utiliza na url "pageNumber" e ao inves de "size" ele gera "pageSize". Entao a url que deveria ser http://localhost:8080/topicos?page=0&size=2 fica como

http://localhost:8080/topicos?pageNumber=2&pageSize=3

E com esta url a paginacao nao funciona. Como resolver?

1 resposta
solução!

Oi Rui,

Realmente esse é um bug da biblioteca do swagger que estamos utilizando no projeto.

Talvez já tenha sido corrigido em uma versão posterior...

Caso não seja possível de você atualizar essa lib no seu projeto, pode contornar da seguinte maneira:

@GetMapping
@Cacheable(value = "listaDeTopicos")
@ApiImplicitParams({
    @ApiImplicitParam(name = "page", dataType = "integer", paramType = "query",
            value = "Pagina a ser carregada", defaultValue = "0"),
    @ApiImplicitParam(name = "size", dataType = "integer", paramType = "query",
            value = "Quantidade de registros", defaultValue = "5"),
    @ApiImplicitParam(name = "sort", allowMultiple = true, dataType = "string", paramType = "query",
            value = "Ordenacao dos registros")
})
public Page<TopicoDto> lista(@RequestParam(required = false) String nomeCurso, 
        @PageableDefault(sort = "dataCriacao", direction = Direction.DESC, page = 0, size = 10) @ApiIgnore Pageable paginacao) {

    if (nomeCurso == null) {
        Page<Topico> topicos = topicoRepository.findAll(paginacao);
        return TopicoDto.converter(topicos);
    } else {
        Page<Topico> topicos = topicoRepository.findByCursoNome(nomeCurso, paginacao);
        return TopicoDto.converter(topicos);
    }
}

Repare na utilização das anotações @ApiImplicitParams e @ApiIgnore do Swaager, para modificar a documentação gerada por ele.

Bons estudos!