2
respostas

Desafio Buscador de CEP

package br.com.alura.buscador.modelo;

import com.google.gson.Gson;

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) {

        try {
            URI url = URI.create("https://viacep.com.br/ws/" + cep + "/json/");

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(url)
                    .build();
            HttpResponse<String> response = client
                    .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.");
        }

    }
}

-----------------------------------------------------------------------------------------------------------------------------------------

package br.com.alura.buscador.modelo;

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

}

-----------------------------------------------------------------------------------------------------------------------------------------

package br.com.alura.buscador.modelo;

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

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

public class GeradorDeArquivo {
    public void geraArquivo(Endereco endereco) {
        try {
            FileWriter escrita = new FileWriter(endereco.cep() + ".json");
            Gson json = new GsonBuilder().setPrettyPrinting().create();
            escrita.write(json.toJson(endereco));
            escrita.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

-----------------------------------------------------------------------------------------------------------------------------------------

package br.com.alura.buscador.principal;

import br.com.alura.buscador.modelo.ConsultaCep;
import br.com.alura.buscador.modelo.Endereco;
import br.com.alura.buscador.modelo.GeradorDeArquivo;

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

public class Principal {

    public static void main(String[] args){

        Scanner leitura = new Scanner(System.in);
        System.out.println("Informe um cep para busca:");
        String cep = leitura.nextLine();
        try {
            ConsultaCep consultaCep = new ConsultaCep();
            Endereco endereco = consultaCep.buscaEndereco(cep);

            GeradorDeArquivo geradorDeArquivo = new GeradorDeArquivo();
            geradorDeArquivo.geraArquivo(endereco);

        }catch (RuntimeException e){
            System.out.println(e.getMessage());
        }finally {
            System.out.println("Finalizando a aplicação");
        }
    }
}

2 respostas

Oi, Alessandro! Como vai?

Obrigado por compartilhar seu código com a comunidade Alura.

Gostei de como você implementou o uso do HttpClient para fazer a busca de CEPs e também a forma organizada com que estruturou o código em diferentes classes. A utilização da classe Gson para serializar o objeto Endereco e gravá-lo em um arquivo JSON está clara e eficiente!

Uma dica interessante seria incluir uma validação simples para garantir que o CEP tenha o formato correto antes de fazer a requisição. Veja este exemplo de validação usando uma expressão regular para CEP:

if (!cep.matches("\\d{5}-\\d{3}")) {
    throw new IllegalArgumentException("CEP inválido! Formato esperado: 00000-000");
}

Esse código verifica se o CEP tem o formato esperado e evita fazer uma requisição desnecessária, lançando uma exceção caso o formato esteja incorreto.

Conte com o apoio do Fórum na sua jornada.

Bons estudos!

Obrigado Armano pela dica de validação do CEP.