findAll - Busca paginada de produtos

Primeiro, faremos um método para buscar todos os itens, veja:

No Service:

@Transactional(readOnly = true)
public List<ProductDto> findAll() {
    List<Product> products = (List<Product>) productRepository.findAll();
    
    return products.stream().map(x -> new ProductDto(x)).collect(Collectors.toList());
}

No Controller:

@GetMapping
public List<ProductDto> findAll() {
    return productService.findAll();
}

Ok, e para realizar a busca paginada? Usaremos Pageable.

É muito simples. Dentro do método do Controller, podemnos passar um parametro chamado "Pageable".

Passaremos esse pageable dentro do findAll, veja:

@GetMapping
public Page<ProductDto> findAll(Pageable pageable) {
    return productService.findAll(pageable);
}

Mas o nosso service também receberá esse pageable!

@Transactional(readOnly = true)
public Page<ProductDto> findAll(Pageable pageable) {
    Page<Product> products = productRepository.findAll(pageable);

    //pode fazer .map direto pois Page já é uma stream
    return products.map(x -> new ProductDto(x));
}

Por padrão, o Pageable retorna 20 elementos

Customizando resultados com Pageable

Resultado de página por tamanho

E se quiséssemos 12 resultados ao invés de 20? Colocaremos um "QueryParam" no postman, veja:

Órdem alfabética

Atualizado