Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Projeto Buscador de CEP

O meu acabou ficando bem diferente do sugerido pela professora, fiz sem guardar os CEPs em um Record. Comentários e críticas são bem-vindos!


public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String mensagemMenu = """
                %%%%%%%%%%%%%%%%%%%%  Checador de CEP  %%%%%%%%%%%%%%%%%%%
                Digite o cep para checar o endereço ou digite 'exit' para sair:""";

        String cep = "0";
        while (true) {
            try {
                PesquisadorDeCep pesquisadorDeCep = new PesquisadorDeCep();
                GeradorDeJson geradorDeJson = new GeradorDeJson();

                System.out.println(mensagemMenu);
                cep = scanner.nextLine();

                if (cep.equalsIgnoreCase("exit")) {
                    break;
                }

                String cepPretty = pesquisadorDeCep.pesquisarCep(cep);

                System.out.println("Aqui está o CEP:");
                System.out.println(cepPretty);

                geradorDeJson.gerarArquivoJson(cepPretty);
                System.out.println("Arquivo Gerado.");
                System.out.println(" ");

            } catch (JsonSyntaxException e){
                System.out.println("Cep Inválido");
            }
        }
    }
}

public class PesquisadorDeCep {

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

    String pesquisarCep(String cep) {
        String url = "https://viacep.com.br/ws/" + cep + "/json/";

        String json = request.criarRequest(url);

        Map<String, Object> cepMapeado = gson.fromJson(json, Map.class);
        String cepBonito = gson.toJson(cepMapeado);

        return cepBonito;
    }
}

public class GeradorDeJson {

    public void gerarArquivoJson(String string){
        try {
            FileWriter listaJson = new FileWriter("cep.json");
            listaJson.write(string);
            listaJson.close();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

public class CriadorDeRequest {

    public String criarRequest(String url){
        try {
        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();

        } catch (IOException e) {
            throw new RuntimeException(e);

        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}
1 resposta

Boa tarde, Isabella! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando o HttpClient para realizar requisições em Java, aplicou de maneira eficiente o Gson para transformar o JSON em um formato legível e entendeu como usar o FileWriter para gerar arquivos com os dados consultados.

E um detalhe curioso para aprimorar seria parametrizar o nome do arquivo JSON, permitindo salvar diferentes consultas sem sobrescrever o mesmo arquivo. Exemplo:

public void gerarArquivoJson(String string, String cep){
    try {
        FileWriter listaJson = new FileWriter("cep_" + cep + ".json");
        listaJson.write(string);
        listaJson.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

Isso faz com que cada CEP pesquisado seja armazenado em um arquivo separado.

Para aprimorar suas soluções, algumas boas práticas são:

  • Validação: tratar CEPs inválidos antes de enviar a requisição.
  • Encapsulamento: separar responsabilidades em classes bem definidas.
  • Flexibilidade: permitir que o usuário escolha o nome do arquivo de saída.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: o que você gostaria de praticar mais agora, tornar o programa mais robusto com validação de CEPs ou explorar melhorias na geração de arquivos para salvar múltiplas consultas?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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