1. Fiz os dois processos já que não havia um json base, de serialização e desserialização:
Criei a Classe Record dessa forma:
package Apis;
public record Pessoa(String nome, int idade, String cidade) {
}
Pessoa p1 = new Pessoa("Paulo", 19, "Santos");
Pessoa p2 = new Pessoa("Cristiano Ronaldo", 40, "Riade");
Gson gson = new Gson();
//criando os json com os 2 objetos
String json1 = gson.toJson(p1);
String json2 = gson.toJson(p2);
System.out.println(json1);
System.out.println(json2);
//transformar esse json com a desserialização
Pessoa pessoa1 = gson.fromJson(json1, Pessoa.class);
Pessoa pessoa2 = gson.fromJson(json2, Pessoa.class);
System.out.println(pessoa1);
System.out.println(pessoa2);
Saída 1 (json):
{"nome":"Paulo","idade":19,"cidade":"Santos"}
{"nome":"Cristiano Ronaldo","idade":40,"cidade":"Riade"}
Saída 2 (gson):
Pessoa[nome=Paulo, idade=19, cidade=Santos]
Pessoa[nome=Cristiano Ronaldo, idade=40, cidade=Riade]
2. Modifiquei o final do código sem alterar o record, crei dois json manualmente e vi que campos faltando aparecem como null e campo adicional não apareceram no gson final:
//json criado depois
String json3 = "{\"nome\": \"Messi\", \"idade\": 38}";
String json4 = "{\"nome\": \"Davi Brito\", \"idade\": 28, \"cidade\": \"Rio de Janeiro\" ,\"profissao\": \"doutor\" }";
// System.out.println(json1);
// System.out.println(json2);
// System.out.println(json3);
// System.out.println(json4);
//transformar esse json com a desserialização
Pessoa pessoa1 = gson.fromJson(json1, Pessoa.class);
Pessoa pessoa2 = gson.fromJson(json2, Pessoa.class);
Pessoa pessoa3 = gson.fromJson(json3, Pessoa.class);
Pessoa pessoa4 = gson.fromJson(json4, Pessoa.class);
System.out.println(pessoa1);
System.out.println(pessoa2);
System.out.println(pessoa3);
System.out.println(pessoa4);
Saída 1 (json):
{"nome":"Paulo","idade":19,"cidade":"Santos"}
{"nome":"Cristiano Ronaldo","idade":40,"cidade":"Riade"}
{"nome": "Messi", "idade": 38}
{"nome": "Davi Brito", "idade": 28, "cidade": "Rio de Janeiro" ,"profissao": "doutor" }
Saída 2 (gson):
Pessoa[nome=Paulo, idade=19, cidade=Santos]
Pessoa[nome=Cristiano Ronaldo, idade=40, cidade=Riade]
Pessoa[nome=Messi, idade=38, cidade=null]
Pessoa[nome=Davi Brito, idade=28, cidade=Rio de Janeiro]
3. Utilizar Gson com livro/editora:
Record Editora:
package Apis;
public record Editora(String nome) {
}
Record Livro:
package Apis;
public record Livro(String titulo, String autor, Editora editora) {
}
Main, criei o objeto livro com dados e sua editora, e dessa forma fiz o json e após isso transformei no gson:
Livro l1 = new Livro("O Poder do Hábito", "Charles Duhigg", new Editora("Objetiva"));
Gson gson = new Gson();
//criando json
String primeiroLivro = gson.toJson(l1);
System.out.println(primeiroLivro);
//json para gson
Livro livroUm = gson.fromJson(primeiroLivro, Livro.class);
System.out.println(livroUm);
Saída JSON/ GSON:
{"titulo":"O Poder do Hábito","autor":"Charles Duhigg","editora":{"nome":"Objetiva"}}
Livro[titulo=O Poder do Hábito, autor=Charles Duhigg, editora=Editora[nome=Objetiva]]