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

[Reclamação] DESAF. 1 E 2 JUNTOS - É PRA USAR O CONVERTER-GSON?

Para alterar o desafio 1 para o que pedia para o desafio 2, baixei o converter-gson como dependência e inclui mais um atributo na classe Pessoa (profissão) mas foi necessário incluí-la como variável e também no construtor Pessoa com esse atributo (profissão) para o código rodar e dar esse novo resultado. Então, conclui que "a conversão de um JSON mesmo se alguns campos estiverem ausentes ou se houver campos adicionais não estiverem representados no objeto Pessoa" como diz na orientação do exercício, não passa pela inclusão do arquivo converter-gson como dependênca do código como eu fiz.

Na 'opinião do instrutor' os atributos estão colocados um ao lado do outro no "modelo" Tipo seguido do valor(vou dizer assim) separados por uma barra invertida, seguido de aspas duplas (") mas esse jeito de referenciar não foi feito nos vídeos das aulas e por isso, acaba causando confusão com a maneira que foi mostrado na aula.

Sinceramente, me sinto frustrada quando vejo o vídeo da lição de um jeito, tento fazer o exercicio do jeito que foi ensinado e me deparo com soluções muito diferentes, mesmo que até sejam mais enxutas. Mas pra quem está aprendendo do zero como eu, se torna chato e cansativo ter que imaginar o porque foi feito desse "novo jeito' diferente do vídeo. Para isso sugiro que se coloque material complementar com explicações extras DA NOVA SOLUÇÃO E MAIS EXERCICIOS PARA SE TREINAR A NOVA SUGESTÃO DA SOLUÇÃO.

Lógico que é bom saber que existem várias maneiras às vezes de se chegar ao mesmo resultado mas para um iniciante é necessário dar mais suporte até ele chegar lá.

Enfim, envio a tela do resultado seguindo as instruções do vídeo. Mas embora tenha compilado certo, não soube fazer uso da "minhaPessoaR". Gostaria de uma orientação de como poderia ter feito uso dela, se possivel. Agradeço muito.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

public class UtiBibliotExtPrincipal {
    public static void main(String[] args){
        Pessoa minhaPessoa= new Pessoa("Selma", "75 anos", "Funcionária Pública", "Salvador");

        String json = "";
        System.out.println(json);

        Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
        PessoaR minhaPessoaR = gson.fromJson(json, PessoaR.class);
        System.out.println("Informações da pessoa:");
        System.out.println(minhaPessoa);
    }
}
public class Pessoa {
    private String nome;
    private String idade;
    private String profissao;
    private String cidade;

    public Pessoa(String nome, String idade, String profissao, String cidade) {
        this.nome = nome;
        this.idade = idade;
        this.profissao = profissao;
        this.cidade = cidade;
    }
    @Override
    public String toString() {
        return "Pessoa{" +
                "nome='" + nome + '\'' +
                ", idade='" + idade + '\'' +
                ", profissão='"  + profissao + '\'' + ", cidade='" + cidade + '\'' + '}';
    }
}
public record PessoaR(String nome, String idade, String profissao, String cidade) {

}
2 respostas

Olá, Ana! Tudo bem?

Agradeço pelo seu feedback, para nós, da Alura, é muito importante a participação da comunidade dos estudantes na melhoria contínua dos nossos conteúdos. Vamos considerar a sua experiência com carinho na revisão desse material.

Em relação a sua dúvida, o código de solução para o primeiro desafio deixado pelos instrutores apresenta uma estrutura um pouco estranha que acabou causando a sua confusão, sinto muito por isso, agora, tentarei explicar um pouco sobre ela e a solução apresentada.

String json = "{\"nome\":\"Selma\",\"idade\":75,\"profissao\":\"Funcionária Pública\", \"cidade\":\"Salvador\"}";

O trecho de código acima, faz uma representação de um JSON, sendo toda primeira palavra a chave, como nome, idade, profissao e cidade. E os valores sendo as palavras seguintes dessas, Selma, 75, Funcionária Pública e Salvador. Assumindo uma forma parecida com essa:

{
    "nome": "Selma",
    "idade": 75,
    "profissao": "Funcionária Pública",
    "cidade": "Salvador"
}

Durante as aulas utilizamos dos códigos abaixo para consumir uma API de forma que retornasse um JSON. Mas, em termos gerais, o trecho de código acima e os presentes abaixo tem o mesmo resultado, um JSON.

   HttpClient client = HttpClient.newHttpClient();
   HttpRequest request = HttpRequest.newBuilder()
         .uri(URI.create("http://foo.com/"))
         .build();
    HttpResponse<String> response = HttpClient
         .newHttpClient()
         .send(request, HttpResponse.BodyHandlers.ofString());

    String json = response.body();

Logo, para simplificar o desafio que tem como foco maior o uso do Record, foi estabelecido como solução a criação de um JSON usando o primeiro trecho de código que compartilhei.

Sobre o código que você implementou, a classe Pessoa acaba sendo desnecessária já que você deve utilizar apenas a record para criar uma classe a partir do JSON. Tendo isso em vista, o seu código principal ficaria assim:

import com.google.gson.Gson;

public class UtiBibliotExtPrincipal {
    public static void main(String[] args){
        
        String json = "{\"nome\":\"Selma\",\"idade\":75,\"profissao\":\"Funcionária Pública\", \"cidade\":\"Salvador\"}";

        Gson gson = new Gson();
        PessoaR minhaPessoaR = gson.fromJson(json, PessoaR.class);
        System.out.println("Informações da pessoa:");
        System.out.println(minhaPessoaR);
    }
}

Espero ter esclarecido a sua dúvida.

Agradeço novamente por sua honestidade e detalhamento. Desejo que o curso seja proveitoso para você, apesar desse empecilho.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.
solução!

Oi Armano, bom dia!

Muito obrigada mesmo pelo seu cuidado em me explicar detalhadamente. Não quero ser chata ao solicitar suporte para as minhas dúvidas mas é que estou tão ávida para aprender que fico um pouco ansiosa para prosseguir. Agradeço a compreensão. E essa solução do instrutor se mostra muito mais simples até. Mas não estou desmerecendo o conhecimento da instrutora do vídeo que é muito segura do conteúdo que explica, além do outro colega que dá suporte às explicações teóricas, que também dá um show. Mas acredito que um conteúdo teórico mais amplo e com mais exercicios de fixação 'dessas diferentes maneiras'-vamos dizer assim- de se chegar ao mesmo objetivo do mesmo código é muito importante para iniciantes. Abraços.