Estou fazendo uma API Rest para o bytebank, e após fazer o DTO, quando eu rodo a aplicação, da este erro:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class br.com.joao.banco.controller.dto.ContaDto and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0])
Segue meu código:
public class ContaDto {
private Cliente titular;
private int agencia;
private int numero;
private double saldo;
public ContaDto(Conta conta) {
this.titular = conta.getTitular();
this.agencia = conta.getAgencia();
this.numero = conta.getNumero();
this.saldo = conta.getSaldo();
}
public void setAgencia(int agencia) {
this.agencia = agencia;
}
public void setNumero(int numero) {
this.numero = numero;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public static List<ContaDto> converter(List<Conta> contas) {
return contas.stream().map(ContaDto::new).collect(Collectors.toList());
}
}
public class Conta { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; protected double saldo; private int agencia; private int numero; @OneToOne private Cliente titular;
public Conta(int agencia, int numero, Cliente cliente) {
this.agencia = agencia;
this.numero = numero;
this.titular = cliente;
}
public void deposita(double valor) {
this.saldo += valor;
}
public void saca(double valor) throws ExcecaoSaldoInsuficiente {
if(this.saldo < valor) {
throw new ExcecaoSaldoInsuficiente("O valor � maior que o saldo. " + "Saldo: " + this.saldo + ", Valor: " + valor);
} else {
this.saldo -= valor;
}
}
public void transfere(double valor, Conta destino) throws ExcecaoSaldoInsuficiente {
this.saca(valor);
destino.deposita(valor);
}
public void imprimeExtrato() {
System.out.println("Titular: " + this.titular.getNome());
System.out.println("CPF: " + this.titular.getCpf());
System.out.println("Número: " + this.getNumero());
System.out.println("Agência: " + this.getAgencia());
System.out.println("Saldo: " + this.getSaldo());
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public int getAgencia() {
return agencia;
}
public void setAgencia(int agencia) {
this.agencia = agencia;
}
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public Cliente getTitular() {
return titular;
}
public void setTitular(Cliente titular) {
this.titular = titular;
}
}
public class Cliente {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String cpf;
public Cliente(String nome, String cpf) {
this.nome = nome;
this.cpf = cpf;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
}
@RestController public class ContaController {
@RequestMapping("/contas")
public List<ContaDto> lista(){
Conta conta = new Conta(121, 111, new Cliente("Joao", "12345678910"));
return ContaDto.converter(Arrays.asList(conta, conta, conta));
}
}