Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não sei em o que estou errado na hora de converter para Json

Pessoal, realizei o desafio, porém não estou conseguindo passar as informações da API para JSON e posteriormente para o TXT.

Classe main

import Models.buscadorCep;
import Utils.ConexaoHttp;
import Utils.Gson;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner readLine = new Scanner(System.in);
        String busca = "";
        ArrayList<buscadorCep> cepList = new ArrayList<>();




        while (!busca.equalsIgnoreCase("sair")) {

            ConexaoHttp conexao = new ConexaoHttp();

            System.out.println("Digite um CEP para buscar: ");
            conexao.setEndereco(readLine.nextLine());

            if (conexao.getEndereco().equalsIgnoreCase("https://viacep.com.br/ws/sair/json/")) {
                break;
            }
            System.out.println(conexao.getEndereco());

                conexao.acessarSite();





        }
    }
}

Classe de Conexão a API

package Utils;

import Models.buscadorCep;
import Models.CepAPI;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ConexaoHttp extends Gson {
    private String endereco;

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = "https://viacep.com.br/ws/" + endereco + "/json/";
    }

    public void acessarSite(){
        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();
        HttpResponse<String> response = null;
        try {
            response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
        } catch (IOException | InterruptedException e) {
            throw new RuntimeException("Não foi possivel encontrar esse CEP");
        }

        String json = response.body();
        System.out.println(json);

        CepAPI meuCepApi = gson.fromJson(json, CepAPI.class);
        System.out.println(meuCepApi);

        buscadorCep meuCep = new buscadorCep(meuCepApi);
        System.out.println("Cep já convertido");
        System.out.println(meuCep);
    }

}

Classe de buscadorCep

package Models;

public class buscadorCep implements Comparable<buscadorCep>  {


    private String cep;
    private String logradouro;
    private String complemento;
    private String bairro;
    private String localidade;
    private String uf;

    public String getCep() {
        return cep;
    }

    public buscadorCep(CepAPI meuCepApi){
        this.cep = meuCepApi.cep();
        this.logradouro = meuCepApi.logradouro();
        this.complemento = meuCepApi.complemento();
        this.bairro = meuCepApi.bairro();
        this.localidade = meuCepApi.localidade();
        this.uf = meuCepApi.uf();
    }

    @Override
    public String toString() {
        return "Cep{" +
                "cep='" + cep + '\'' +
                ", logradouro='" + logradouro + '\'' +
                ", complemento='" + complemento + '\'' +
                ", bairro='" + bairro + '\'' +
                ", localidade='" + localidade + '\'' +
                ", uf='" + uf + '\'' +
                '}';
    }

    @Override
    public int compareTo(buscadorCep outroCep) {
        return this.getCep().compareTo(outroCep.getCep());
    }
}

Classe Record CepAPI

package Models;

public record CepAPI(String cep, String logradouro, String complemento, String bairro, String localidade, String uf) {
}

Classe GSON

package Utils;

import Models.CepAPI;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.GsonBuilder;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class Gson {
    com.google.gson.Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy
                    .UPPER_CAMEL_CASE)
            .setPrettyPrinting()
            .create();

    public void salvarArquivo(List lista) throws IOException {
        FileWriter escrita = new FileWriter("Cep.json");
        escrita.write(gson.toJson(lista));
        escrita.close();
    }


}
1 resposta
solução!

Olá Allan!

Primeiramente, vamos analisar o código que você compartilhou. Na classe ConexaoHttp, você está utilizando a biblioteca Gson para fazer a conversão de JSON para objetos Java. Porém, parece que você não está importando a classe corretamente.

No arquivo Gson.java, você criou uma classe com o mesmo nome da biblioteca Gson. Isso pode estar causando conflitos e impedindo o correto funcionamento da conversão. Para resolver esse problema, sugiro que você renomeie a sua classe para evitar conflitos de nomes. Por exemplo, você pode renomeá-la para GsonUtils.

Além disso, é importante garantir que você tenha importado corretamente a biblioteca Gson no seu projeto. Certifique-se de que o arquivo JAR do Gson esteja adicionado ao classpath do seu projeto.

Outro ponto importante é que você precisa adicionar a anotação @SerializedName nos atributos da classe CepAPI para mapear corretamente os nomes dos campos do JSON. Por exemplo:

public record CepAPI(
    @SerializedName("cep") String cep,
    @SerializedName("logradouro") String logradouro,
    @SerializedName("complemento") String complemento,
    @SerializedName("bairro") String bairro,
    @SerializedName("localidade") String localidade,
    @SerializedName("uf") String uf
) {}

Com essas alterações, você deve conseguir fazer a conversão correta do JSON para o objeto CepAPI.

Quanto à gravação dos dados em um arquivo TXT, você pode utilizar a classe FileWriter para escrever os dados em um arquivo. Por exemplo:

public void salvarArquivo(List lista) throws IOException {
    FileWriter escrita = new FileWriter("Cep.txt");
    escrita.write(gson.toJson(lista));
    escrita.close();
}

Nesse exemplo, estou escrevendo os dados da lista em um arquivo chamado "Cep.txt". Certifique-se de que você tenha permissão para escrever no diretório em que o arquivo será criado.

Espero que essas dicas te ajudem a resolver o problema! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!

Espero ter ajudado e bons estudos!