Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

No serializer found

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));
}

}

2 respostas
solução!

Oi João,

Na sua classe ContaDto ta faltando métodos getter. Por isso deu o erro.

Bons estudos!

Muito obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software