1
resposta

projeto finalizado

Preferi qualquer tudo em uma pasta só json, antes disso coloquei em um Conjunto Set<> pra não se repetir nenhuma pesquisa, pq fiz um loop para poder pesquisar mais de um endereço se a pessoa quiser, e quando nao quiser mais tudo vai pro json. Projetinho muito bacana.

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 buscaCep(String cep) {
        String endereco = "https://viacep.com.br/ws/" + cep + "/json/";
        System.out.println(endereco);

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();

        try {
            HttpResponse<String> response = client
                    .send(request, HttpResponse.BodyHandlers.ofString());
            return new Gson().fromJson(response.body(), Endereco.class);

        } catch (Exception ex) {
            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.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public class Principal {
    public static void main(String[] args) throws IOException {
        Scanner leitura = new Scanner(System.in);
        boolean continuar = true;
        ConsultaCep consultaCep = new ConsultaCep();
        Set<Endereco> enderecos = new HashSet<>();
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();

        while (continuar) {
            System.out.println("Digite o numero do cep:");
            var busca = leitura.next();
            busca = busca.replaceAll("[-.]", "");

            try {
                Endereco novoCep = consultaCep.buscaCep(busca);
                System.out.println(novoCep);
                enderecos.add(novoCep);

            } catch (RuntimeException ex){
                System.out.println(ex.getMessage());
            }

            String proximo;
            while (true) {
                System.out.println("Aceita fazer uma nova consulta? S/N.");
                proximo = leitura.next().toUpperCase();

                if (proximo.equals("S")) {
                    continuar = true;
                    break;
                } else if (proximo.equals("N")) {
                    continuar = false;
                    System.out.println("Finalizando a aplicação.");
                    break;
                } else {
                    System.out.println("Resposta invalida. Digite 'S' ou 'N'.");
                }
            }
        }

        FileWriter escrita = new FileWriter("enderecos.json");
        escrita.write(gson.toJson(enderecos));
        escrita.close();
    }
}
1 resposta

Opa, Danilo! Tudo certo?

Seu código está ótimo - apresenta boa estrutura e endentação correta, além de você ter aplicado muito bem os conteúdos passados em aula. Parabéns! Isso é super importante para que a leitura seja de fácil entendimento. Continue praticando e aplicando seus conhecimentos.

No mais, em caso de dúvidas ou problemas, saiba que você pode contar com a comunidade do fórum para lhe auxiliar.

Abraços e bons estudos!