1
resposta

[Projeto] Consultar Cep - Minha Solução

Main

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Cep cep = new Cep();

        String menu = """
                \n1- Consultar Cep
                2- Sair
                """;


        int resposta = 0;
        while (resposta != 2){
            System.out.println(menu);

            System.out.print("\nDigite a opção: ");
            resposta = scanner.nextInt();
            scanner.nextLine();

            if (resposta == 1){
                try {
                    cep.Consultar();
                } catch (RuntimeException e){
                    System.out.println(e.getMessage());
                }

            } else if (resposta < 1 || resposta > 2) {
                System.out.println("Opção Inválida");

            }
        }
        System.out.println("Saindo...");
    }
}

Cep

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

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class Cep {
    private Scanner scanner = new Scanner(System.in);
    private String rua;
    private String bairro;
    private String cidade;
    private String estado;
    private String regiao;

    public Cep (Endereco endereco) {
        this.rua = endereco.logradouro();
        this.bairro = endereco.bairro();
        this.cidade = endereco.localidade();
        this.estado = endereco.estado();
        this.regiao = endereco.regiao();
    }

    public Cep() {

    }

    @Override
    public String toString() {
        return "\n" + rua + " | Bairro: " + bairro + " | Cidade: "
                + cidade + " | Estado: " + estado + " | Região: " + regiao;
    }

    Gson gson = new GsonBuilder()
            .setPrettyPrinting()
            .create();

    public void Consultar() {
        System.out.print("Digite o número do cep: ");
        String numeroCep = scanner.nextLine();

        String urlCep = "https://viacep.com.br/ws/" + numeroCep + "/json/";

        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(urlCep))
                    .build();
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());

            String json = response.body();

            Endereco consultaCep = gson.fromJson(json, Endereco.class);

            Cep meuCep = new Cep(consultaCep);
            System.out.println(meuCep);

            GeradorDeArquivo gerador = new GeradorDeArquivo();
            gerador.salvaJson(consultaCep);

        } catch (Exception e) {
            throw new RuntimeException("Cep inválido, digite novamente");
        }
    }
}

Gerador de Arquivos

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

import java.io.FileWriter;
import java.io.IOException;

public class GeradorDeArquivo {

    public void salvaJson (Endereco endereco) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        FileWriter writer = new FileWriter(endereco.cep() + "json");
        writer.write(gson.toJson(endereco));
        writer.close();

    }
}

Endereço

public record Endereco(String cep, String logradouro, String bairro, String localidade,
                       String estado, String regiao) {
}
1 resposta

Oi, Matheus! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Gostei bastante da sua organização em separar as responsabilidades nas classes Main, Cep, GeradorDeArquivo e Endereco. Isso é um ótimo exemplo de como aplicar o conceito de responsabilidade única no Java.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!