0
respostas

Projeto final do curso [Busca CEP] - Primeira Parte

Segue a resolução do desafio proposto.

Record Endereco:

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

Classe BuscaCep:

//imports

public class BuscaCep {
    public String consultaCep(String cep) throws IOException, InterruptedException {
        String url = "https://viacep.com.br/ws/" + cep + "/json";
        HttpClient client = HttpClient
                .newHttpClient();
        HttpRequest request = HttpRequest
                .newBuilder()
                .uri(URI.create(url)).build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

Classe Menu:

//imports

public class Menu {
    private List<Endereco> enderecos = new ArrayList<>();
    public void apresentarMenu(int pagina) throws IOException {
        Scanner input = new Scanner(System.in);
        BuscaCep buscaCep  = new BuscaCep();
        Gson gson = new Gson();
        System.out.println("========== Busca CEP Facin ==========");
        switch(pagina){
            //principal
            case 0:
                System.out.println("============= Principal =============");
                System.out.println("1 - Busca por Cep");
                System.out.println("2 - Apresentar lista de busca");
                System.out.println("3 - Gerar JSON da lista de busca");
                System.out.println("4 - Sair");
                break;
            case 1:
                System.out.println("=========== Busca por Cep ===========");
                System.out.println("Digite um CEP:");
                try {
                    String cep = input.nextLine();
                    String json = buscaCep.consultaCep(cep);
                    Endereco endereco = gson.fromJson(json, Endereco.class);
                    enderecos.add(endereco);
                    System.out.println(endereco.toString());
                    System.out.println("Endereço adicionado à lista!");
                    System.out.println("1 - Adicionar novo endereço");
                    System.out.println("0 - Retornar ao menu principal");
                } catch (Exception e) {
                    System.out.println("Digite um número válido!");
                }
                break;
            case 2:
                System.out.println("===== Apresentar Lista de Busca =====");
                System.out.println(enderecos.toString());
                System.out.println("0 - Retornar ao menu principal");
                break;
            case 3:
                System.out.println("==== Gerar JSON da lista de busca ====");
            try{
                FileWriter writer = new FileWriter("enderecos.json");
                Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
                String json = gsonPretty.toJson(enderecos);
                writer.write(json);
                writer.close();
                System.out.println("Arquivo gerado com sucesso!");
            } catch(Exception e){
                System.out.println("Erro ao gerar JSON da lista de busca!");
            }
                System.out.println("0 - Retornar ao menu principal");
                break;
            case 4:
                System.out.println("Saindo...");
                break;
            default:
                System.out.println("Opção inválida!");
                break;
        }
    }
}

Classe Main:

//imports

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        int pagina = 0;
        Menu menu = new Menu();

        do {
            menu.apresentarMenu(pagina);
            try {
                pagina = input.nextInt();
                input.nextLine();
            } catch (Exception e) {
                System.out.println("Digite um numero válido");
            }
        } while (pagina != 4);
        System.out.println("Saindo...");
        input.close();
    }
}