Main:
import br.com.alura.buscaCEP.classes.BuscaApi;
import br.com.alura.buscaCEP.classes.CepGson;
import br.com.alura.buscaCEP.classes.CepJson;
import br.com.alura.buscaCEP.classes.GeraArquivo;
import br.com.alura.buscaCEP.exececoes.ErroDeBadRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner leitor = new Scanner(System.in);
String cepInformado = "";
List<CepGson> lista = new ArrayList<CepGson>();
GeraArquivo geraArquivo = new GeraArquivo();
BuscaApi buscaApi = new BuscaApi();
while (!cepInformado.equalsIgnoreCase("sair")) {
System.out.println(" |--------------------------------------------|");
System.out.println("--|Se desejar encerrar o programa digite 'sair'|--");
System.out.println("--| Informe o CEP que deseja buscar: |--");
System.out.println(" |--------------------------------------------|");
cepInformado = leitor.nextLine();
if (cepInformado.equalsIgnoreCase("sair")) {
break;
}
try {
CepJson meuCepJson = buscaApi.consultaApi(cepInformado);
CepGson meuCepGson = new CepGson(meuCepJson);
System.out.println("Informações sobre o CEP inserido: " + meuCepGson);
lista.add(meuCepGson);
geraArquivo.gerarArquivo(lista);
} catch (ErroDeBadRequest e) {
System.out.println("ERRO: " + e.getMessage());
} catch (Exception e) {
System.out.println("ERRO, CEP inválido: " + e.getMessage());
}
}
System.out.println("Programa finalizou corretamente.");
}
}
Conexão com API:
package br.com.alura.buscaCEP.classes;
import br.com.alura.buscaCEP.exececoes.ErroDeBadRequest;
import com.google.gson.Gson;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class BuscaApi {
private String link;
public CepJson consultaApi(String cepDigitado) throws IOException, InterruptedException {
if (cepDigitado.length() > 8) {
throw new ErroDeBadRequest("CEP maior que 8 caracteres, informe um CEP válido.");
} else {
this.link = "https://viacep.com.br/ws/" + cepDigitado + "/json/";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(this.link)).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
return new Gson().fromJson(response.body(), CepJson.class);
}
}
}
Classe de formatação gson p/ json:
package br.com.alura.buscaCEP.classes;
public class CepGson {
private String cep;
private String logradouro;
private String bairro;
private String localidade;
private String uf;
private String estado;
private int ddd;
public CepGson(CepJson meuCepJson) {
this.cep = meuCepJson.cep();
this.logradouro = meuCepJson.logradouro();
this.bairro = meuCepJson.bairro();
this.localidade = meuCepJson.localidade();
this.uf = meuCepJson.uf();
this.estado = meuCepJson.estado();
this.ddd = meuCepJson.ddd();
}
@Override
public String toString() {
return
"\nCEP: " + cep +
"\nLogradouro: " + logradouro +
"\nBairro: " + bairro +
"\nLocalidade: " + localidade +
"\nUF: " + uf +
"\nEstado: " + estado +
"\nDDD: " + ddd;
}
}
Record para receber o json:
package br.com.alura.buscaCEP.classes;
public record CepJson(String cep, String logradouro, String bairro, String localidade, String uf, String estado, int ddd) {
}
Gerador de arquivo:
package br.com.alura.buscaCEP.classes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class GeraArquivo {
public void gerarArquivo(List<CepGson> lista) throws IOException {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
FileWriter escrita = new FileWriter("cep.json");
escrita.write(gson.toJson(lista));
escrita.close();
}
}