Oi pessoal tudo blz?
Estou com o seguinte problema, estou fazendo um filtro utilizando criteria, e preciso retornar uma lista de objetos, para eu conseguir usar no meu frontend, mas está acontecendo o seguinte, o endpoint me retorna os dados, mas com um LIST:[ antes dos meus objetos, tipo como se fosse os objetos pertecentes a esse list, ele está assim:
Mas eu preciso somente que me retorne a lista de objetos, sem esse List na frente
Segue meu código:
Controller
@RestController
@RequestMapping("api")
public class ClienteResource {
@Autowired
private final ClienteService clienteService;
private List<ClienteDto> result;
public ClienteResource(ClienteService clienteService) {
this.clienteService = clienteService;
}
@GetMapping(value = "/findClientsFinances")
public ResponseEntity<List<ClienteDto>> findAllClientsFinances(Pageable pageable,
@RequestParam(required = false, name = "nome") String nome,
@RequestParam(required = false, name = "pago") Boolean pago,
@RequestParam(required = false, name = "vencido") Boolean vencido,
@RequestParam(required = false, name = "dataInicio") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dataInicio,
@RequestParam(required = false, name = "dataFim")@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dataFim,
Boolean checker) {
// try {
Page<ClienteDto> clienteDto = clienteService.findAllCriteria(pageable, nome, pago, vencido, dataInicio, dataFim);
result = clienteDto.getContent();
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(ServletUriComponentsBuilder.fromCurrentRequest(), clienteDto);
return ResponseEntity.ok().headers(headers).body(result);
// } catch (Exception e) {
// System.out.println("Erro ao encontrar cliente");
// throw new BadRequestException("Erro ao encontrar cliente");
// }
}
Dto
package br.com.gerenciamentoPagamento.pagamento.controller.dto;
import br.com.gerenciamentoPagamento.pagamento.domain.Cliente;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.StringJoiner;
public class ClienteDto implements Serializable {
private Long id;
private Long userId;
private Long customerId;
private Boolean statusPagamento;
private String nome;
private String email;
private String code;
private String cpf;
private LocalDate dataPagamento;
private LocalDate dataVencimento;
public ClienteDto(Long id, Long userId, Long customerId, Boolean statusPagamento, String nome, String email, String code, String cpf, LocalDate dataPagamento, LocalDate dataVencimento) {
this.id = id;
this.userId = userId;
this.customerId = customerId;
this.statusPagamento = statusPagamento;
this.nome = nome;
this.email = email;
this.code = code;
this.cpf = cpf;
this.dataPagamento = dataPagamento;
this.dataVencimento = dataVencimento;
}
public ClienteDto() {
}
public ClienteDto(Cliente cliente) {
this.id = cliente.getId();
this.userId = cliente.getUserId();
this.customerId = cliente.getCustomerId();
this.statusPagamento = cliente.getStatusPagamento();
this.email = cliente.getEmail();
this.code = cliente.getCode();
this.nome = cliente.getNome();
this.dataPagamento = cliente.getDataPagamento();
this.dataVencimento = cliente.getDataVencimento();
this.cpf = cliente.getDocumento();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public Boolean getStatusPagamento() {
return statusPagamento;
}
public void setStatusPagamento(Boolean statusPagamento) {
this.statusPagamento = statusPagamento;
}
public LocalDate getDataPagamento() {
return dataPagamento;
}
public void setDataPagamento(LocalDate dataPagamento) {
this.dataPagamento = dataPagamento;
}
public LocalDate getDataVencimento() {
return dataVencimento;
}
public void setDataVencimento(LocalDate dataVencimento) {
this.dataVencimento = dataVencimento;
}
@Override
public String toString() {
return "ClienteDto{" +
"id=" + id +
", userId=" + userId +
", customerId=" + customerId +
", statusPagamento=" + statusPagamento +
", nome='" + nome + '\'' +
", email='" + email + '\'' +
", code='" + code + '\'' +
", cpf='" + cpf + '\'' +
", dataPagamento=" + dataPagamento +
", dataVencimento=" + dataVencimento +
'}';
}
}
Service
@Service
public class ClienteService {
private CustomFinanceiroRepository customFinanceiroRepository;
public ClienteService(CustomFinanceiroRepository customFinanceiroRepository) {
this.customFinanceiroRepository = customFinanceiroRepository;
}
public Page<ClienteDto> findAllCriteria(Pageable pageable, String nome, Boolean pago, Boolean vencido, LocalDate dataInicio, LocalDate dataFim){
return customFinanceiroRepository.findAllClientes(pageable, nome, pago, vencido, dataInicio, dataFim).map(ClienteDto::new);
}
}
Criteria
import br.com.gerenciamentoPagamento.pagamento.domain.Cliente;
import br.com.gerenciamentoPagamento.pagamento.domain.Cliente_;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@Repository
public class CustomFinanceiroRepository {
@Autowired
private EntityManager entityManager;
public Page<Cliente> findAllClientes(Pageable pageable, String nome, Boolean statusPagamento, Boolean vencido, LocalDate dataInicial, LocalDate dataFinal) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Cliente> criteriaQuery = builder.createQuery(Cliente.class);
Root<Cliente> clienteRoot = criteriaQuery.from(Cliente.class);
List<Predicate> predicates = new ArrayList<>();
//Verifica se nome está preenchido
if(nome != null) {
Predicate nomePredicate = builder.like(clienteRoot.get("nome"), "%" + nome + "%");
predicates.add(nomePredicate);
}
if (statusPagamento != null) {
if(statusPagamento.equals(true)) {
Predicate pagoPredicate = builder.isTrue(clienteRoot.get("statusPagamento"));
predicates.add(pagoPredicate);
} else {
Predicate pagoPredicate = builder.isFalse(clienteRoot.get("statusPagamento"));
predicates.add(pagoPredicate);
}
}
if (dataInicial != null && dataFinal != null) {
Predicate dataInicialPredicate = builder.greaterThanOrEqualTo(clienteRoot.get(Cliente_.dataPagamento), dataInicial);
predicates.add(dataInicialPredicate);
Predicate dataFinalPredicate = builder.lessThanOrEqualTo(clienteRoot.get(Cliente_.dataPagamento), dataFinal);
predicates.add(dataFinalPredicate);
}
if (vencido != null) {
Predicate pagoPredicate = builder.lessThanOrEqualTo(clienteRoot.get(Cliente_.dataVencimento), LocalDate.now());
predicates.add(pagoPredicate);
}
Predicate[] predicateArray = new Predicate[predicates.size()];
predicates.toArray(predicateArray);
criteriaQuery.where(predicateArray);
//Seleciona o limite por página
List<Cliente> result = entityManager.createQuery(criteriaQuery)
.setFirstResult((int) pageable.getOffset())
.setMaxResults(pageable.getPageSize()).getResultList();
//Conta o total de registros
CriteriaQuery<Long> countQuery = builder.createQuery(Long.class);
Root<Cliente> bookRootCount = countQuery.from(Cliente.class);
countQuery.select(builder.count(bookRootCount)).where(builder.and(predicates.toArray(new Predicate[predicates.size()])));
Long count = entityManager.createQuery(countQuery).getSingleResult();
return new PageImpl<>(result, pageable, count);
}
}