I created a method inside a service class to generate a paged product list using SpringData (Java Spring Rest application), follow the code:
public Page<ProdutoDTOVendedor> listarProdutos(String descricao, Boolean disponivel,
Integer page, Integer size, String orderBy, String direction) {
//Rotina para validação do usuário do end-point
UserSS us = AuthService.authenticated();
Optional<Vendedor> vendedor = vendedorRepository.findById(us.getId());
if (!vendedor.isPresent()) {
throw new ObjectNotFoundException("Vendedor não encontrado");
}
Pageable pageable = PageRequest.of(page, size, Direction.valueOf(direction), orderBy);
List<ProdutoDTOVendedor> produtosVendedor = new ArrayList<>();
Optional<List<ItemVendedor>> itensVendedor = itemVendedorRepository.findByIdVendedorEqualsAndIdProdutoDescricaoDetalhadaContaining(vendedor.get(), descricao);
for (ItemVendedor item : itensVendedor.get()) {
produtosVendedor.add(itemVendedorToProdutoDTOVendedor(item));
}
Page<ProdutoDTOVendedor> produtosPage = new PageImpl<ProdutoDTOVendedor>(produtosVendedor,pageable, (pageable.getOffset() + pageable.getPageSize()));
return produtosPage;
}
The method generates the following paginated list:
Ifyounoticetheattributesaysthiswiththevalue24,soyoucanbringthe4elementsofthelistbecauseitisthetotalthatIhaveregistered,butifIchangethisattributesize,thelistofitemsshouldcomewiththequantityequivalentifthevalueassignedislessthanIhaveregisteredproducts:
Asyoucansee,IplacedthesizeparameterintheURI,thepageableobjectreceivedandrecognizedthesizeparametercorrectly,butitdidnothaveeffectintheproductlist,withtheparameterinthevalue1shouldreturnonly1itemandnotthetotalquantity.IbelieveIamnotabletoworkwiththePageImpl<>inthecorrectway,howtocorrectthissituation?Hereisthecodeforthemethodoftheresourceclassresponsibleforcallingtheservicemethod:
@GetMapping(value="/produtos/list")
public ResponseEntity<Page<ProdutoDTOVendedor>> listarProdutos(
@RequestParam(value = "descricao", defaultValue = "") String descricao,
@RequestParam(value = "disponivel", defaultValue = "") Boolean disponivel,
@RequestParam(value = "page", defaultValue = "0") Integer page,
@RequestParam(value = "size", defaultValue = "24") Integer size,
@RequestParam(value = "orderBy", defaultValue = "descricao") String orderBy,
@RequestParam(value = "direction", defaultValue = "ASC") String direction) {
Page<ProdutoDTOVendedor> produtos = vendedorService.listarProdutos(descricao, disponivel, page, size, orderBy, direction);
return ResponseEntity.ok().body(produtos);
}