package br.com.buscadorcep.modelo;
public record ViaCep(String logradouro, String bairro, String localidade, String uf) {
}
package br.com.buscadorcep.modelo;
public class Endereco {
private String cep;
private String logradouro;
private String bairro;
private String localidade;
private String uf;
public Endereco(String cep, ViaCep viaCep) {
this.cep = cep;
this.logradouro = viaCep.logradouro();
this.bairro = viaCep.bairro();
this.localidade = viaCep.localidade();
this.uf = viaCep.uf();
}
@Override
public String toString() {
return """
CEP: %s
Rua: %s
Bairro: %s
Cidade: %s
Estado: %s
""".formatted(cep, logradouro, bairro, localidade, uf);
}
}
package br.com.buscadorcep.principal;
import br.com.buscadorcep.modelo.Endereco;
import br.com.buscadorcep.modelo.ViaCep;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
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.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner leitura = new Scanner(System.in);
String cepDigitado = "";
List<Endereco> enderecos = new ArrayList<>();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
while (true) {
System.out.println("Digite o CEP para consulta ou sair para encerrar: ");
cepDigitado = leitura.nextLine().trim();
if (cepDigitado.equalsIgnoreCase("sair")) {
break;
}
String endereco = "https://viacep.com.br/ws/" + cepDigitado + "/json/";
try {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
if (json.contains("\"erro\":true")) {
System.out.println("CEP não encontrado ou inválido.");
continue;
}
ViaCep dadosDoCep = gson.fromJson(json, ViaCep.class);
Endereco meuEndereco = new Endereco(cepDigitado, dadosDoCep);
System.out.println("CEP encontrado: ");
System.out.println(meuEndereco);
enderecos.add(meuEndereco);
} catch (JsonSyntaxException e) {
System.out.println("Não foi possível converter a resposta em JSON.");
} catch (IllegalArgumentException e) {
System.out.println("Erro de argumento.");
} catch (IOException | InterruptedException e) {
System.out.println("Erro de comunicação ou interrupção: Falha na rede ou na requisição.");
}
}
System.out.println(enderecos);
FileWriter escrita = new FileWriter("enderecosbuscados.json");
escrita.write(gson.toJson(enderecos));
escrita.close();
}
}