Json para objeto java usando Jackson [RESOLVIDO]

1. Json para objeto java usando Jackson [RESOLVIDO]

Rodrigo
omag0

(usa Debian)

Enviado em 27/06/2018 - 19:57h

Olá a todos. Estou com um problema grande e gostaria de uma grande ajuda.
Me tiraram do ambiente que conheço bem (php) e me jogaram em um que ainda estou dando os primeiros passos (java).
Estou trabalhando em uma api rest que recebe um JSON de uma fonte externa. Acontece que nao consigo gravar no banco quando o json vem com array.
exemplificar:
se vier assim:

{ 
"nome" : "fulano",
"numeroDeTelefone" : " 222222"
}


grava ok.
Mas se vier

{
"nome" : "fulano"
"listaDeTelefones" :
[
{"numeroDeTelefone" : "2222"},
{"numeroDeTelefone" : "3333}
]
}

o banco grava somente o nome e o telefone fica como null.
Lendo descobri que tenho que serializar / deserializar o json. Pode ser com a biblioteca Gjson, jackson, etc. Como estou trabalhando com spring boot 2 e spring 5, que vem como padrão o jackson estou usando essa biblioteca.
No domínio tenho as classes Cliente e Telefone da seguinte maneira:

@Entity
public class Cliente
private String nome;
@ManytoMany
private List<Telefone> telefones = new ArrayList<>();

public Cliente() {}

getters e setters


E tenho a classe telefone:

@Entity
public class Telefone
private String numero;
@JsonIgnore
@ManytoMany
private List<Cliente> clientes = new ArrayList<>();

public Telefone () {}

getters e setters


criei uma classe Cliente DTO:

public class ClienteDTO
private String nome;
private String numero;

public ClienteDTO () {}

getters e setters


e no service criei a classe ClienteService que além de alguns métodos tem o seguinte método:

public Cliente converteDoDTO(ClienteDTO clienteDTO) {

Cliente c = new Cliente(clienteDTO.getNome());
Telefone t = new Telefone(clienteDTO.getNumero());

c.getTelefones().addALL(Arrays.asList(t));
t.getClientes().addALL(Arrays.asList(c));

}


Sei que no DTO tenho que retirar o String numero e colocar um Telefone[] numeros;

Mas me perco ai. Alguém poderia ajudar com essa dor de cabeça?


  


2. Re: Json para objeto java usando Jackson

Rodrigo
omag0

(usa Debian)

Enviado em 28/06/2018 - 16:40h

Consegui resolver.
Java e suas annotation com meta informacao. php nao tem disso (só o Symphony, mas ai já é framework)
Bastava criar uma lista no DTO
List<Telefone> telefones = new ArrayList<>();
e colocar uma annotation, ficando assim:

@JsonPropertY("nome_do_array_json")
List<Telefone> telefones = new ArrayList<>();


no meu caso ficando:

@JsonPropertY("telefones")
List<Telefone> telefones = new ArrayList<>();


Ai no Service basta fazer um loop para adicionar cada novo objeto:

for (Telefone x : clienteDTO.getTelefones()
) {
(cliente.getTelefones().add(x);
}


ou caso ache melhor um lambda.

E voilá. Funciona que é uma uva!!!!

Nossa, java pra web dá muitas voltas.
PHP em duas linhas tava tudo resolvido.... Mas conhecimento nunca é demais.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts