1
resposta

Construindo uma nova aplicação

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

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class ConsultandoCEP {
    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        String consulta = "";

        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();

        while (!consulta.equalsIgnoreCase("sair")) {
            System.out.println("Digite o CEP que deseja consultar ou digite 'sair' para encerrar: ");
            consulta = leitura.nextLine();

            if (consulta.equalsIgnoreCase("sair")) {
                System.out.println("Encerrando o programa...");
                break;
            }

            String url = "https://viacep.com.br/ws/" + consulta + "/json/";

            try {
                HttpClient client = HttpClient.newHttpClient();
                HttpRequest request = HttpRequest.newBuilder()
                        .uri(URI.create(url))
                        .build();

                HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

                String json = response.body();
                Localidade minhaLocalidade = gson.fromJson(json, Localidade.class);

                System.out.println("Localidade: " + minhaLocalidade);

                BufferedWriter escrita = new BufferedWriter(new FileWriter("Cep.txt", true));
                escrita.write(minhaLocalidade.toString());
                escrita.newLine();
                escrita.close();

                System.out.println("Localidade salva no arquivo.");
            } catch (IOException | InterruptedException e) {
                System.out.println("Erro ao consultar o CEP: " + e.getMessage());
            }
        }

        leitura.close();
        System.out.println("Programa finalizado.");
    }
}

public class Localidade {
    private String cep;
    private String logradouro;
    private String complemento;
    private String bairro;
    private String localidade;
    private String uf;
    private String ibge;
    private String gia;
    private String ddd;
    private String siafi;

    @Override
    public String toString() {
        return "CEP: " + cep +
                ", Logradouro: " + logradouro +
                ", Bairro: " + bairro +
                ", Cidade: " + localidade +
                ", UF: " + uf;
    }

    // Getters e Setters (opcional, dependendo do uso futuro)
    public String getCep() { return cep; }
    public String getLogradouro() { return logradouro; }
    public String getComplemento() { return complemento; }
    public String getBairro() { return bairro; }
    public String getLocalidade() { return localidade; }
    public String getUf() { return uf; }
    public String getIbge() { return ibge; }
    public String getGia() { return gia; }
    public String getDdd() { return ddd; }
    public String getSiafi() { return siafi; }
}

Saídas esperadas

Digite o CEP que deseja consultar ou digite 'sair' para encerrar: Localidade: CEP: 01001-000, Logradouro: Praça da Sé, Bairro: Sé, Cidade: São Paulo, UF: SP Localidade salva no arquivo. Digite o CEP que deseja consultar ou digite 'sair' para encerrar:

Conteúdo do arquivo Cep.txt após execução:

CEP: 01001-000, Logradouro: Praça da Sé, Bairro: Sé, Cidade: São Paulo, UF: SP

Se o usuário digitar Cep inválido:

Digite o CEP que deseja consultar ou digite 'sair' para encerrar: 00000-000

1 resposta

Oi, Gabrielly! Como vai?

Sua implementação está bem estruturada e chama atenção pelo uso do Gson com setPrettyPrinting(), que melhora a leitura do JSON. Também é legal ver como você pensou na persistência dos dados com BufferedWriter.

Uma dica interessante para o futuro é validar o retorno da API antes de salvar os dados, verificando se o campo cep veio nulo ou vazio, o que evita salvar respostas inválidas. Veja este exemplo:

if (minhaLocalidade.getCep() == null) {
    System.out.println("CEP inválido. Tente novamente.");
    continue;
}

Esse trecho impede que o programa salve um resultado que não veio corretamente da API.

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