3
respostas

[Projeto] Desafio - Consumir API CEP | Concluído

Main

package app;

public class App {
    public static void main(String[] args) {
        Menu menu = new Menu();
        menu.exibirMenu();
        System.out.println("Programa finalizado.");
    }
}

Classe Menu

package app;

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

import model.Cep;
import service.ConsultaCepService;
import service.GeraArquivoService;

public class Menu {
    private final Scanner scanner = new Scanner(System.in);
    private final ConsultaCepService consultaCepService = new ConsultaCepService();
    private final GeraArquivoService geraArquivoService = new GeraArquivoService();

    public void exibirMenu(){
        String busca;
        List<Cep> ceps = new ArrayList<>();


        do {
            System.out.println("Para sair, digite 'sair'.");
            System.out.println("Digite o CEP (somente numeros) que deseja verificar: ");
            busca = scanner.nextLine();

            if (busca.equalsIgnoreCase("sair"))
            break;

            if (busca.length() != 8) {
                System.out.println("CEP inválido, digite novamente.");
            } else {
                try {
                    System.out.println("Buscando...");
                    Cep cep = consultaCepService.consultarCep(busca);
                    System.out.println(cep);
                    ceps.add(cep);
                } catch (Exception e) {
                    System.out.println("Erro ao buscar CEP: " + e.getMessage());
                }
            }

        } while (!busca.equalsIgnoreCase("sair"));

        try {
            geraArquivoService.gerarArquivo(ceps, "Ceps.json");
        } catch (Exception e) {
            System.out.println("Erro ao criar o arquivo: "  + e.getMessage());
        }
    }
}

Classe do CEP

package model;

public class Cep {
    private String cep;
    private String logradouro;
    private String complemento;
    private String bairro;
    private String localidade;
    private String uf;
    private String ibge;

    public Cep(String cep, String logradouro, String complemento, String bairro, String localidade, String uf, String ibge) {
        this.cep = cep;
        this.logradouro = logradouro;
        this.complemento = complemento;
        this.bairro = bairro;
        this.localidade = localidade;
        this.uf = uf;
        this.ibge = ibge;
    }

    public String getCep() {
        return cep;
    }
    public String getLogradouro() {
        return logradouro;
    }
    public String getComplemento() {
        return complemento;
    }
    public String getBairro() {
        return bairro;
    }
    public String getLocalidade() {
        return localidade;
    }
    public String getUf() {
        return uf;
    }
    public String getIbge() {
        return ibge;
    }

   @Override
   public String toString() {
      return "Endereço [" + "CEP: " + cep + ", Logradouro: " + logradouro + ", Complemento: " + complemento + ", Bairro: " + bairro + ", Localidade: " + localidade + ", UF: " + uf + ", IBGE: " + ibge + "]";
   }
}
3 respostas

Service para consultar o CEP

package service;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import com.google.gson.Gson;
import model.Cep;

public class ConsultaCepService {
    private final Gson gson = new Gson();

    public Cep consultarCep(String cep) throws IOException, InterruptedException {
        String url = "https://opencep.com/v1/" + cep.trim() + ".json";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create(url))
        .build();

        HttpResponse<String> response = client
        .send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8));

        String body = response.body();

        return gson.fromJson(body, Cep.class);
    }
}

Service para gerar o arquivo

package service;

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.List;

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

import model.Cep;

public class GeraArquivoService {
    private final Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .create();

    public void gerarArquivo(List<Cep> ceps, String nomeArquivo) throws IOException {

        try (Writer writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(nomeArquivo), StandardCharsets.UTF_8))) {
            gson.toJson(ceps, writer);
            System.out.println("Arquivo " + nomeArquivo + " criado com sucesso.");
        }
    }
}

Link do GitHub : https://github.com/edugramosf/consumir-api-cep

Oi Eduardo,

Parabéns pelo projeto! 👏

Seu código está bem estruturado e funcional, demonstrando um bom entendimento dos conceitos abordados no curso.

A separação de responsabilidades em classes como Menu, ConsultaCepService e GeraArquivoService é uma prática excelente. 👍

Para saber mais: Documentação do HttpClient do Java. A documentação oficial do HttpClient do Java, que você usou no seu projeto, pode te ajudar a entender melhor como ele funciona e quais são suas opções.

Continue praticando e explorando novas funcionalidades! 💪