1
resposta

Minha Solução para o projeto final do curso Java Consumindo API

Consegui criar uma interação com o usuário, separei as classes em pacotes e fiz os imports dos pacotes. Elaborei uma lista de endereços, com a opção do usuário adicionar quantos endereços ele quiser na lista, e também trabalhei com a criação de um arquivo json com essa lista ordenada após o usuário escolher "sair". Também dentro do while, criei uma condição para que se o usuário escolher sair sem escolher nenhum cep, o arquivo json não é criado, evitando assim criar arquivos json's vazios na aplicação, evitando ocupar espaço na mémoria.

Classe principal

package br.com.alura.principal;
import br.com.alura.metodos.ConsultaCep;
import br.com.alura.modelos.Endereco;
import br.com.alura.metodos.GeradorDeArquivo;

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

public class Principal {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        ConsultaCep consultaCep = new ConsultaCep();
        List<Endereco> enderecos = new ArrayList<>();


        while (true) {
            System.out.println("Digite o número de CEP para consulta (ou 'sair' para encerrar):");
            String cep = leitura.nextLine();

            if (cep.equalsIgnoreCase("sair")) {
                break;
            }

            try {
                Endereco novoEndereco = consultaCep.buscaEndereco(cep);
                enderecos.add(novoEndereco);
            } catch (RuntimeException e) {
                System.out.println("Erro ao consultar o CEP: " + e.getMessage());
            }
        }

        if (!enderecos.isEmpty()) {
            try {
                GeradorDeArquivo gerador = new GeradorDeArquivo();
                gerador.salvaJson(enderecos);
                System.out.println("Arquivo JSON criado com sucesso.");
                System.out.println(enderecos);
            } catch (IOException e) {
                System.out.println("Erro ao criar o arquivo JSON: " + e.getMessage());
            }
        } else {

            System.out.println("Nenhum CEP foi adicionado.");
        }
        System.out.println("Encerrando o programa.");
    }
}

Classe gerador de arquivos

package br.com.alura.metodos;

import br.com.alura.modelos.Endereco;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class GeradorDeArquivo {
    public void salvaJson(List<Endereco> enderecos) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        try (FileWriter escrita = new FileWriter("enderecos.json")) {
            gson.toJson(enderecos, escrita);
        }
    }
}

Classe Endereço

package br.com.alura.modelos;
public record Endereco(String cep, String logradouro, String complemento,
                       String localidade, String uf) {

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

Classe Consulta do Cep

package br.com.alura.metodos;

import br.com.alura.modelos.Endereco;
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 ConsultaCep {

    public Endereco buscaEndereco(String cep) {

        URI endereco = URI.create("https://viacep.com.br/ws/" + cep + "/json");

        HttpRequest request = HttpRequest.newBuilder()
                .uri(endereco)
                .build();

        //Try Catch na classe principal para tratar exceção caso o cep seja inválido
        //O try deve envolver desde o HttResponse
        try {
            HttpResponse<String> response = HttpClient
                    .newHttpClient()
                    .send(request, HttpResponse.BodyHandlers.ofString());
            return  new Gson().fromJson(response.body(), Endereco.class);
        } catch (Exception e) {
            throw new RuntimeException("Não consegui obter o endereço a partir desse Cep");
        }
    }
}
1 resposta

Oii, Erivan! Tudo joia?

Parabéns, sua implementação está bem estruturada e organizada! Continue praticando para se desenvolver cada vez mais.

Deixo um vídeo bem legal, que explica como utilizar o fórum para turbinar os seus estudos:

Qualquer dúvida que surgir, conte conosco.

Bons estudos, Erivan!