Como havia tentado fazer antes com outras ideias, meu código ficou assim, depois de também aproveitar algumas dicas desta aula e adaptar ao que eu já tinha feito anteriormente.
package br.com.alexrribeiro.buscacep.programa;
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;
import java.util.Scanner;
public class BuscaCEP {
Scanner sc = new Scanner(System.in);
private String cepDigitado;
public Endereco recebeCep(String cepDigitado) {
Endereco enderecoBuscado;
this.cepDigitado = cepDigitado
.replace("-","")
.replace(".","");
if (verificaCep()) {
enderecoBuscado = conectaApi();
} else {
System.out.println("O CEP digitado não é válido.");
enderecoBuscado = null;
}
return enderecoBuscado;
}
private boolean verificaCep() {
if (cepDigitado.matches("[0-9]{8}")) {
return true;
}
return false;
}
private Endereco conectaApi() {
String json = null;
try {
String endereco = String.format("https://viacep.com.br/ws/%s/json/", cepDigitado);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
json = response.body();
} catch (IOException | InterruptedException e) {
throw new RuntimeException("Não foi possível obter o endereço a partir desse CEP.");
} catch (Exception e) {
System.out.println("Alguma coisa deu errado. =/");
}
Endereco resultado = new Gson().fromJson(json, Endereco.class);
return resultado;
}
}
Apesar de não estar tão bom quanto o da aula, está funcionando. E, no caso de formatos de CEP diferentes (menos dígitos ou alfanuméricos), retornando uma mensagem de CEP inválido. Também imaginando que uma pessoa poderia colocar pontos ou traços ao informar um CEP, deixei replaces para esses dois casos.