Olá, então como disse no titulo fiz a minha própria resolução do ViaCEP, porém da forma que eu fiz eu queria algumas sugestões tanto de organização e de como melhorar nesse quesito de API e desenvolvimento pessoal com programação. Pois tenho sentido dificuldade de por a mão na massa, até consigo uma coisa ou outra porém parece que só some tudo da cabeça na hora de começar um projeto.. é bizarro.
Agora com relação ao meu código eu queria uma ajuda, a aula que foi dada ela fez um record e atribuiu os dados de lá, já eu fiz get/set só do cep que acaba retornando tudo. Eu gostaria pegar os dados igual ela fez porém quanto tento fazer isso, meio que tentando adaptar n consigo.
return new Gson().fromJson(response.body(), Endereco.class);
Mesmo após eu criando um record, não funciona. Vou deixar o código como está, mas queria uma forma de solucionar esse caso. E mais uma coisa, eu tbm n consigo fazer o FileWriter, por conta do gson.. ele não cria a pasta como deveria.
Código cru, sem as modificações acima:
package VIACEP_DESAFIO_FINAL.exercicio;
import java.io.FileWriter;
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 ApiDados {
int cep;
private int getCep() {
return cep;
}
public void setCep(String cep) throws ErroCepException{
if(cep.length() != 8){
throw new ErroCepException("CEP inválido, ele deve conter 8 dígitos.");
}
this.cep = Integer.parseInt(cep);
}
public ApiDados(int cep) {
this.cep = cep;
}
public ApiDados() {
}
public void consultaCep() throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String endereco = "https://viacep.com.br/ws/" + cep + "/json/";
System.out.println("URL: " + endereco);
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(endereco))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
MAIN:
package VIACEP_DESAFIO_FINAL.exercicio;
import com.google.gson.Gson;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException, ErroCepException, InterruptedException {
Scanner sc = new Scanner(System.in);
ApiDados apidados = new ApiDados();
Gson gson = new Gson();
System.out.println("Digite o CEP: ");
String cep = sc.nextLine();
try{
apidados.setCep(cep);
apidados.consultaCep();
}catch (ErroCepException e){
System.out.println("Erro: " + e.getMessage());
}catch (IOException | IllegalArgumentException e){
System.out.println("Erro ao buscar dados do CEP" + e.getMessage());
}
sc.close();
}
}
Excpetion:
package VIACEP_DESAFIO_FINAL.exercicio;
public class ErroCepException extends RuntimeException {
public ErroCepException(String message) {
super(message);
}
}