Segue a resolução do desafio proposto.
Record Endereco:
public record Endereco (String logradouro, String bairro, String localidade, String estado, String cep) {
}
Classe BuscaCep:
//imports
public class BuscaCep {
public String consultaCep(String cep) throws IOException, InterruptedException {
String url = "https://viacep.com.br/ws/" + cep + "/json";
HttpClient client = HttpClient
.newHttpClient();
HttpRequest request = HttpRequest
.newBuilder()
.uri(URI.create(url)).build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
Classe Menu:
//imports
public class Menu {
private List<Endereco> enderecos = new ArrayList<>();
public void apresentarMenu(int pagina) throws IOException {
Scanner input = new Scanner(System.in);
BuscaCep buscaCep = new BuscaCep();
Gson gson = new Gson();
System.out.println("========== Busca CEP Facin ==========");
switch(pagina){
//principal
case 0:
System.out.println("============= Principal =============");
System.out.println("1 - Busca por Cep");
System.out.println("2 - Apresentar lista de busca");
System.out.println("3 - Gerar JSON da lista de busca");
System.out.println("4 - Sair");
break;
case 1:
System.out.println("=========== Busca por Cep ===========");
System.out.println("Digite um CEP:");
try {
String cep = input.nextLine();
String json = buscaCep.consultaCep(cep);
Endereco endereco = gson.fromJson(json, Endereco.class);
enderecos.add(endereco);
System.out.println(endereco.toString());
System.out.println("Endereço adicionado à lista!");
System.out.println("1 - Adicionar novo endereço");
System.out.println("0 - Retornar ao menu principal");
} catch (Exception e) {
System.out.println("Digite um número válido!");
}
break;
case 2:
System.out.println("===== Apresentar Lista de Busca =====");
System.out.println(enderecos.toString());
System.out.println("0 - Retornar ao menu principal");
break;
case 3:
System.out.println("==== Gerar JSON da lista de busca ====");
try{
FileWriter writer = new FileWriter("enderecos.json");
Gson gsonPretty = new GsonBuilder().setPrettyPrinting().create();
String json = gsonPretty.toJson(enderecos);
writer.write(json);
writer.close();
System.out.println("Arquivo gerado com sucesso!");
} catch(Exception e){
System.out.println("Erro ao gerar JSON da lista de busca!");
}
System.out.println("0 - Retornar ao menu principal");
break;
case 4:
System.out.println("Saindo...");
break;
default:
System.out.println("Opção inválida!");
break;
}
}
}
Classe Main:
//imports
public class Main {
public static void main(String[] args) throws IOException {
Scanner input = new Scanner(System.in);
int pagina = 0;
Menu menu = new Menu();
do {
menu.apresentarMenu(pagina);
try {
pagina = input.nextInt();
input.nextLine();
} catch (Exception e) {
System.out.println("Digite um numero válido");
}
} while (pagina != 4);
System.out.println("Saindo...");
input.close();
}
}