1
resposta

[Projeto] Desafio API CEP

Olá,

Segue minha resolução do desafio de acesso a API CEP, baseado nos conceitos e dicas utilizados pela professora.


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

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

public class Principal {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner scanner = new Scanner(System.in);
        ConsultaCep consultaCep = new ConsultaCep();

        System.out.println("Digite um número de CEp para consulta: ");
        var cep = scanner.nextLine();


        try {
            Endereco novoEndereco = consultaCep.buscaEndereco(cep);
            Gson gson = new GsonBuilder().setPrettyPrinting().create();
            String enderecoJson = gson.toJson(novoEndereco);
            System.out.println(enderecoJson);

            GeradorArquivo geradorAquivo = new GeradorArquivo();
            geradorAquivo.gerarArquivoJSON(novoEndereco, "endereco.json");
            System.out.println("Dados do endereço salvos no arquivo endereço.");

        } catch (RuntimeException | IOException | InterruptedException e) {
            System.out.println(e.getMessage());
            System.out.println("Finalizando a aplicação");
        }
        scanner.close();
    }
}

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

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) throws IOException, InterruptedException {
        URI endereco = URI.create("https://viacep.com.br/ws/" + cep + "/json");

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

        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.");
        }

    }

}

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

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

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

public class GeradorArquivo {
    public void gerarArquivoJSON(Object objeto, String nomeArquivo) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String json = gson.toJson(objeto);

        try (FileWriter writer = new FileWriter(nomeArquivo)){
            writer.write(json);
        }
    }
}
1 resposta

Bom dia, Oliveira!

Obrigado por contribuir com a comunidade Alura. Seu código está bem estruturado e cobre várias partes importantes do processo de consumo de API, manipulação de JSON e gravação de arquivos.

Uma sugestão de implementação é você adicionar uma validação para o formato do CEP antes de fazer a consulta. Exemplo:

public boolean isCepValido(String cep) {
    return cep.matches("\\d{5}-?\\d{3}");
}

Espero ter ajudado. Abraços e bons estudos!