Consegui Completar os três requisitos do Desafio:
-Criar uma aplicação para consultar a API ViaCEP -Menu para o usuário informar o CEP para busca -Geração de um arquivo .JSON com os dados do endereço
Estou aberto a sujestões, tentei fazer o código limpo e funcional
Segue meu código abaixo:
APLICAÇÃO
public class Application {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner leitura = new Scanner(System.in);
String cep = "";
List<String> listas = new ArrayList<>();
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
System.out.println("\nBem-Vindo ao ConsultaCEP API no Java 17!"
+ "\nOs CEP devem ter:"
+ "\n- 8 numeros inteiros,"
+ "\n- Não podem conter espaços,"
+ "\n- Não podem conter letras,"
+ "\n- Não podem conter caractéres especiais.\n");
while (!cep.equalsIgnoreCase("sair")) {
System.out.print("--COMANDOS-- \n"
+ "\"SAIR\": para sair da aplicação,\n"
+ "\"LISTA\": para baixar uma lista dos CEP já consultados, ou\n"
+ "Digite um novo CEP para busca: ");
cep = leitura.nextLine();
if (cep.equalsIgnoreCase("sair")) {
System.out.println("Finalizando programa...");
break;
}
if (cep.equalsIgnoreCase("lista")) {
FileWriter escrita = new FileWriter("lista.json");
escrita.write(gson.toJson(listas));
System.out.println("Criando uma lista...");
escrita.close();
break;
}
String enderecoCepApi = "https://viacep.com.br/ws/" + cep + "/json/";
try {
ValidarCep(cep);
System.out.println("Validando o CEP, aguarde...");
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(URI.create(enderecoCepApi)).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String json = (String) response.body();
if (json.contains("\"erro\": true")) {
System.out.println("CEP não encontrado.");
} else if (response.statusCode() == 400) {
throw new ErroConsultaCep("Não foi possivel encontrar o CEP.");
} else {
System.out.println(json);
}
listas.add(json);
} catch (OitoCaracteresException | AlfanumericoException | ErroConsultaCep e) {
System.out.println(e.getMessage());
}
}
leitura.close();
}
private static void ValidarCep(String cep) {
if (cep.length() > 8) {
throw new OitoCaracteresException("CEP inválido: Insira um CEP de 8 numeros inteiros");
}
if (!cep.matches("[0-9]+")) {
throw new AlfanumericoException("CEP inválido: Insira um CEP de 8 numeros inteiros");
}
}
}
ErroConsultaCep
public class ErroConsultaCep extends RuntimeException {
public ErroConsultaCep(String mensagem) {
super(mensagem);
}
}
AlfanumericoException
public class AlfanumericoException extends RuntimeException{
public AlfanumericoException(String mensagem) {
super(mensagem);
}
}
OitoCaracteresException
public class OitoCaracteresException extends RuntimeException{
public OitoCaracteresException(String mensagem) {
super(mensagem);
}
}