Olá Rede, resolvo compartilhar minha resolução do desafio proposto pela Alura, então resolvi por em prática e realizar um projeto.
localiza-cep
PACOTE APP :- Main
Execução do Aplicativo
package br.com.daniel.localizacep.app;
public class Main {
public static void main(String[] args) {
new Menu().exibeMenu();
}
}
- Menu
Menu de forma Interativa
// imports omitidos
public class Menu {
private final Scanner leitura = new Scanner(System.in);
private final ConsumoApi consumoApi = new ConsumoApi();
private final GeradorDeArquivo gerarArquivo = new GeradorDeArquivo();
public void exibeMenu() {
while (true) {
System.out.println("""
=======================================================
Bem-vindo ao LOCALIZA C.E.P!
Você pode consultar o CEP válido residente do BRASIL.
=======================================================
INSTRUÇÕES:
DIGITE [0] PARA SAIR.
""");
System.out.println("Digite um CEP:");
String cep = leitura.nextLine();
String verifiy = cep;
if (verifiy.length() < 2 & verifiy.contains("0")) {
System.out.println("Saindo...");
break;
}
try {
Endereco endereco = consumoApi.consultaCep(cep);
System.out.println(endereco);
gerarArquivo.salvarJson(endereco);
} catch (CepInvalidoException e) {
System.out.println("Erro: " + e.getMessage());
}
}
}
}
PACOTE EXCEPTION:
- CepInvalidoException
Para Tratar erro expecífico
package br.com.daniel.localizacep.exception;
public class CepInvalidoException extends RuntimeException {
public CepInvalidoException(String message) {
super(message);
}
}
PACOTE MODEL:
- Endereco (Record)
Tratar as informações extraídas da API
package br.com.daniel.localizacep.model;
public record Endereco(String cep, String logradouro, String complemento, String localidade, String uf) {
@Override
public String toString() {
String complementoFormatado =
complemento.isBlank()
? "Não informado"
: complemento;
// Texto formatado omitido
);
}
}
PACOTE SERVICE:
- ConsumoApi
Consultar o endereco da aplicação
// Imports omitidos
public class ConsumoApi {
public Endereco consultaCep(String cep) {
URI endereco = URI.create("https://viacep.com.br/ws/" + cep + "/json/");
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(endereco)
.build();
HttpResponse<String> response = null;
if (cep.length() != 8) {
throw new CepInvalidoException("O CEP deve conter exatamente 8 dígitos.");
}
try {
response = client
.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException | InterruptedException e) {
throw new RuntimeException("Não foi possível obter o endereço a partir desse CEP.");
} catch (CepInvalidoException e) {
System.out.println("Error: "+e.getMessage());
}
finally {
System.out.println("Operação concluída.");
}
var json = response.body();
return new Gson().fromJson(json, Endereco.class);
}
}
PACOTE UTIL:
- GeradorDeArquivo
Guardar informações consultadas em formato JSON
public class GeradorDeArquivo {
public void salvarJson (Endereco endereco) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
try {
FileWriter escrita =
new FileWriter(endereco.cep() + ".json");
escrita.write(gson.toJson(endereco));
escrita.close();
System.out.println("Arquivo JSON gerado com sucesso.");
} catch (IOException e) {
throw new RuntimeException("Não foi possível gerar o arquivo.");
}
}
}
Aceito feedbacks e sugestão de melhoria!
Link do Repositório: https://github.com/D4nN3t0/localiza-cep
desenvolvido com ☕ por Daniel Avelino durante a formação Java na Alura.