1
resposta

Desafio Concluído

Consegui Completar os três requisitos do Desafio:

-Criar uma aplicação para consultar a API ViaCEP -Menu para o usuário informar o CEP para busca -Geração de um arquivo .JSON com os dados do endereço

Estou aberto a sujestões, tentei fazer o código limpo e funcional

Segue meu código abaixo:

APLICAÇÃO

public class Application {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        String cep = "";
        List<String> listas = new ArrayList<>();
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();

        System.out.println("\nBem-Vindo ao ConsultaCEP API no Java 17!"
                + "\nOs CEP devem ter:"
                + "\n- 8 numeros inteiros,"
                + "\n- Não podem conter espaços,"
                + "\n- Não podem conter letras,"
                + "\n- Não podem conter caractéres especiais.\n");

        while (!cep.equalsIgnoreCase("sair")) {
            System.out.print("--COMANDOS-- \n"
                    + "\"SAIR\": para sair da aplicação,\n"
                    + "\"LISTA\": para baixar uma lista dos CEP já consultados, ou\n"
                    + "Digite um novo CEP para busca: ");

            cep = leitura.nextLine();

            if (cep.equalsIgnoreCase("sair")) {
                System.out.println("Finalizando programa...");
                break;
            }

            if (cep.equalsIgnoreCase("lista")) {
                FileWriter escrita = new FileWriter("lista.json");
                escrita.write(gson.toJson(listas));
                System.out.println("Criando uma lista...");
                escrita.close();
                break;
            }

            String enderecoCepApi = "https://viacep.com.br/ws/" + cep + "/json/";

            try {
                ValidarCep(cep);
                System.out.println("Validando o CEP, aguarde...");

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

                if (json.contains("\"erro\": true")) {
                    System.out.println("CEP não encontrado.");
                } else if (response.statusCode() == 400) {
                    throw new ErroConsultaCep("Não foi possivel encontrar o CEP.");
                } else {
                    System.out.println(json);
                }
                listas.add(json);

            } catch (OitoCaracteresException | AlfanumericoException | ErroConsultaCep e) {
                System.out.println(e.getMessage());
            }
        }
        leitura.close();
    }

    private static void ValidarCep(String cep) {
        if (cep.length() > 8) {
            throw new OitoCaracteresException("CEP inválido: Insira um CEP de 8 numeros inteiros");
        }
        if (!cep.matches("[0-9]+")) {
            throw new AlfanumericoException("CEP inválido: Insira um CEP de 8 numeros inteiros");
        }
    }

}

ErroConsultaCep

public class ErroConsultaCep extends RuntimeException {
    public ErroConsultaCep(String mensagem) {
        super(mensagem);
    }
}

AlfanumericoException

public class AlfanumericoException extends RuntimeException{
    public AlfanumericoException(String mensagem) {
        super(mensagem);
    }
}

OitoCaracteresException

public class OitoCaracteresException extends RuntimeException{
    public OitoCaracteresException(String mensagem) {
        super(mensagem);
    }
}
1 resposta

Oii, Yuri! Tudo bem?

Parabéns por completar o desafio!

Seu código está muito bom e você fez um ótimo trabalho. Continue assim! É treinando mesmo que você vai aprimorando seu conhecimento.

Se alguma dúvida surgir, estamos aqui.

Abraços! :)