2
respostas

Desafio - Busca CEP (Concluído)

Main:

import br.com.alura.buscaCEP.classes.BuscaApi;
import br.com.alura.buscaCEP.classes.CepGson;
import br.com.alura.buscaCEP.classes.CepJson;
import br.com.alura.buscaCEP.classes.GeraArquivo;
import br.com.alura.buscaCEP.exececoes.ErroDeBadRequest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner leitor = new Scanner(System.in);
        String cepInformado = "";
        List<CepGson> lista = new ArrayList<CepGson>();
        GeraArquivo geraArquivo = new GeraArquivo();
        BuscaApi buscaApi = new BuscaApi();

        while (!cepInformado.equalsIgnoreCase("sair")) {
            System.out.println("  |--------------------------------------------|");
            System.out.println("--|Se desejar encerrar o programa digite 'sair'|--");
            System.out.println("--|     Informe o CEP que deseja buscar:       |--");
            System.out.println("  |--------------------------------------------|");
            cepInformado = leitor.nextLine();

            if (cepInformado.equalsIgnoreCase("sair")) {
                break;
            }
            try {
                CepJson meuCepJson = buscaApi.consultaApi(cepInformado);
                CepGson meuCepGson = new CepGson(meuCepJson);

                System.out.println("Informações sobre o CEP inserido: " + meuCepGson);

                lista.add(meuCepGson);
                geraArquivo.gerarArquivo(lista);

            } catch (ErroDeBadRequest e) {
                System.out.println("ERRO: " + e.getMessage());
            } catch (Exception e) {
                System.out.println("ERRO, CEP inválido: " + e.getMessage());
            }
        }
        System.out.println("Programa finalizou corretamente.");
    }
}

Conexão com API:

package br.com.alura.buscaCEP.classes;

import br.com.alura.buscaCEP.exececoes.ErroDeBadRequest;
import com.google.gson.Gson;

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 BuscaApi {
    private String link;

    public CepJson consultaApi(String cepDigitado) throws IOException, InterruptedException {
        if (cepDigitado.length() > 8) {
            throw new ErroDeBadRequest("CEP maior que 8 caracteres, informe um CEP válido.");
        } else {
        this.link = "https://viacep.com.br/ws/" + cepDigitado + "/json/";
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create(this.link)).build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return new Gson().fromJson(response.body(), CepJson.class);
        }
    }
}

Classe de formatação gson p/ json:

package br.com.alura.buscaCEP.classes;

public class CepGson {
    private String cep;
    private String logradouro;
    private String bairro;
    private String localidade;
    private String uf;
    private String estado;
    private int ddd;

    public CepGson(CepJson meuCepJson) {
        this.cep = meuCepJson.cep();
        this.logradouro = meuCepJson.logradouro();
        this.bairro = meuCepJson.bairro();
        this.localidade = meuCepJson.localidade();
        this.uf = meuCepJson.uf();
        this.estado = meuCepJson.estado();
        this.ddd = meuCepJson.ddd();
    }

    @Override
    public String toString() {
        return
                "\nCEP: " + cep +
                "\nLogradouro: " + logradouro +
                "\nBairro: " + bairro +
                "\nLocalidade: " + localidade +
                "\nUF: " + uf +
                "\nEstado: " + estado +
                "\nDDD: " + ddd;
    }
}

Record para receber o json:

package br.com.alura.buscaCEP.classes;

public record CepJson(String cep, String logradouro, String bairro, String localidade, String uf, String estado, int ddd) {
}

Gerador de arquivo:

package br.com.alura.buscaCEP.classes;

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

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

public class GeraArquivo {

    public void gerarArquivo(List<CepGson> lista) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        FileWriter escrita = new FileWriter("cep.json");
        escrita.write(gson.toJson(lista));
        escrita.close();
    }
}
2 respostas

Link do GitHub : https://github.com/Hugo-Sousa-prog/Desafio---Busca-CEP

Oi, Hugo! Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Gostei da sua implementação do try-catch para tratar erros de entrada e capturar exceções específicas, como ErroDeBadRequest. Esse cuidado evita que o programa trave ao receber CEPs inválidos e melhora a experiência do usuário.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!