1
resposta

[Dúvida] Não estou conseguindo gerar um arquivo / Desafio consumindo API CEP

Boa noite, eu fiz o último desafio do curso. Tentei fazer um pouco diferente do que a professora desenvolveu. O endereço esta sendo apresentado corretamente em tela, porém não esta gerando o arquivo corretamente. Até gera, mas só retorna null.

import java.io.IOException;

public static void main(String[] args) {
    Endereco endereco = new Endereco();

    try {
        EstruturaMenu.menu();
        GeradorArquivo.geraArquivo(endereco);
    } catch (RuntimeException | IOException error) {
        System.out.println(error.getMessage());
        System.out.println("Finalizando a aplicação.");
    }
}
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;

public class GeradorArquivo {

    public static void geraArquivo(Endereco endereco) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        FileWriter escrita = new FileWriter("endereco.json");
        escrita.write(gson.toJson(endereco.cep));
        escrita.close();
    }
}
public class Endereco {

    String cep;
    String logradouro;
    String complemento;
    String bairro;
    String localidade;
    String uf;

    @Override
    public String toString() {
        return "cep: " + cep + 
               ", logradouro: " + logradouro+
               ", complemento: " + complemento +
               ", bairro: " + bairro +
               ", localidade: " + localidade +
               ", uf: " + uf;
    }
}
import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class BuscaCep {

    public Endereco buscaEndereco(String cep){

        URI api = URI.create("https://viacep.com.br/ws/" + cep + "/json/" );

        HttpRequest request = HttpRequest.newBuilder()
        .uri(api)
        .build();

            try {
                HttpResponse<String> response = HttpClient
                .newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());
                return new Gson().fromJson(response.body(), Endereco.class);
            } catch (Exception error) {
                throw new RuntimeException("Não foi possível obter o endereço.");
            }
    }
}
import java.util.Scanner;

public class EstruturaMenu {

    public static void menu(){
        BuscaCep buscaCep = new BuscaCep();
        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite o CEP: ");
        var cep = leitura.nextLine();

        Endereco endereco = buscaCep.buscaEndereco(cep);
        System.out.println(endereco);


    }
}
1 resposta

Boa tarde, Luan! Tudo bem?

Você não está conseguindo gerar o arquivo e salvar as informações retornadas pela API de CEP por conta de quando você faz a chamada do método responsável por gerar esse arquivo você passar um endereço que não contém nenhuma informação, logo caso o arquivo seja gerado ele estará vazio.

Para resolver isso mudei o local onde GeradorArquivo é chamado, agora ele está sendo chamado em EstruturaMenu, já que nesse arquivo temos todas as informações de endereço do CEP.

Segue os códigos com correções realizadas:

Main.java

import utils.EstruturaMenu;

import java.io.IOException;

class Main {
    public static void main(String[] args) {
        try {
            EstruturaMenu.menu();
        } catch (RuntimeException error) {
            System.out.println(error.getMessage());
            System.out.println("Finalizando a aplicação.");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}

EstruturaMenu.java

package utils;

import model.Endereco;

import java.io.IOException;
import java.util.Scanner;

public class EstruturaMenu {

    public static void menu() throws IOException {
        BuscaCep buscaCep = new BuscaCep();
        Scanner leitura = new Scanner(System.in);

        System.out.println("Digite o CEP: ");
        var cep = leitura.nextLine();

        Endereco endereco = buscaCep.buscaEndereco(cep);

        GeradorArquivo.geraArquivo(endereco);
        System.out.println(endereco);
    }
}

Note que algumas importações estão um pouco diferente do seu, então certifique-se de modificar para ficarem corretamente como deveriam.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.