0
respostas

[Dúvida] Minha própria resolução, com um detalhe.

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);
    }
}