1
resposta

[Projeto] Resolução do desafio de consulta ViaCEP

Gostaria de compartilhar a minha resolução do desafio proposto ao final do curso "Java: consumindo API, gravando arquivos e lidando com erros", cuja proposta é uma consulta de informações na API ViaCEP.

ConsultaCepService.java

public class ConsultaCepService {

    private Gson gson = new GsonBuilder().create();
    private final String enderecoConsultaViaCep = "https://viacep.com.br/ws/%s/json/";
    private final String cepRegex = "[0-9]{5}-?[0-9]{3}";

    /**
     * @description Método responsável por efetuar a busca das informações do CEP através da API ViaCEP. Retorna null em caso de erro.
     *
     * @param cep - String
     * @return Endereco
     */
    public Endereco buscaCep(String cep) {
        Endereco endereco = new Endereco();

        if(!cep.matches(cepRegex))
            throw new IllegalArgumentException("CEP inválido!");

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

            if(respostaJsonViaCep.contains("Http 400"))
                throw new ConsultaDeEnderecoException("A consulta no endereço falhou!");

            EnderecoViaCep enderecoViaCep = gson.fromJson(respostaJsonViaCep, EnderecoViaCep.class);
            endereco = new Endereco(enderecoViaCep);
            endereco.exibirInformacoes();

            return endereco;
        } catch (ConsultaDeEnderecoException e) {
            System.out.println(e.getMessage() + enderecoConsultaViaCep.formatted(cep));
        } catch (IllegalStateException e) {
            System.out.println("Erro ao converter resposta da consulta.");
        } catch (IllegalArgumentException e) {
            System.out.println("Houve um erro ao passar o argumento. Verifique o CEP que digitou - "+cep+". " + e.getMessage());
        } catch (IOException | InterruptedException e) {
            System.out.println("Erro ao buscar cep: " + e.getMessage());
        }

        return null;
    }

}

CriaArquivoService.java

public class CriaArquivoService {

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

    /**
     * @description Método responsável por criar um arquivo contendo as informações do CEP consultado.
     *
     * @param enderecoConsultado - Endereco
     */
    public void criaArquivoDeCepConsutado(Endereco enderecoConsultado) {
        try {
            FileWriter escritor = new FileWriter(enderecoConsultado.getCep() + ".json");
            escritor.write(gson.toJson(enderecoConsultado));
            escritor.close();
        } catch (IOException e) {
            System.out.println("Ocorreu um erro ao tentar escrever o arquivo de endereços consultados.");
        }
    }
}

ConsultaCepPrincipal.java

public class ConsultaCepPrincipal {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        String busca = "";
        final String palavraChaveSair = "sair";
        String mensagemBuscaCep = "Digite o CEP que deseja procurar: ";

        ConsultaCepService consultaCepService = new ConsultaCepService();
        CriaArquivoService criaArquivoService = new CriaArquivoService();

        while (!busca.equalsIgnoreCase(palavraChaveSair)) {
            System.out.println(mensagemBuscaCep);
            busca = leitura.nextLine();

            if(busca.equalsIgnoreCase(palavraChaveSair))
                break;

            try {
                Endereco endereco = consultaCepService.buscaCep(busca);

                if(Objects.nonNull(endereco)) {
                    criaArquivoService.criaArquivoDeCepConsutado(endereco);
                }
            } catch (IllegalArgumentException e) {
                System.out.println("Houve um erro ao passar o argumento. Verifique o CEP que digitou - " + busca + ". " + e.getMessage());
            }

        }

    }
}

Por fim, deixo o link do repositório no GitHub contendo o projeto completo. Projeto resolução consulta API ViaCEP

1 resposta

Olá Jonas, como vai você? Espero que esteja bem!

Obrigada por compartilhar a resolução do desafio conosco, é isso aí! Continue se dedicando aos estudos e colocando em prática seus conhecimentos.

Caso tenha dúvidas, fico à disposição.

Abraços e bons estudos!