Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Desafio: Projeto Final

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

public class Principal {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite um número de CEP para consulta:");
        var cep = leitura.nextLine();

        try {
            ConsultaCep consultaCep = new ConsultaCep();
            Endereco novoEndereco = consultaCep.buscaEndereco(cep);
            System.out.println(novoEndereco);
            GeradorDeArquivo gerador = new GeradorDeArquivo();
            gerador.salvaJson(novoEndereco);
        } catch (RuntimeException | IOException e) {
            System.out.println(e.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 GeradorDeArquivo {
    public void salvaJson(Endereco endereco) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();

        FileWriter escrita = new FileWriter(endereco.cep() + "json");
        escrita.write(gson.toJson(endereco));
        escrita.close();
    }
}
public record Endereco(String cep, String logradouro, String complemento, String localidade, String uf) {

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


public class ConsultaCep {
    public Endereco buscaEndereco(String cep) throws IOException, InterruptedException {
        URI endereco = URI.create("https://viacep.com.br/ws/" + cep + "/json/");

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

        try {
            HttpResponse<String> response = HttpClient
                    .newHttpClient()
                    .send(request, HttpResponse.BodyHandlers.ofString());
            return new Gson().fromJson(response.body(), Endereco.class);
        } catch (Exception e) {
            throw new RuntimeException("Não consegui obter o endereço a partir desse CEP.");
        }




    }

}
1 resposta

Oi, Smalley. Tudo bem com você?

Seu projeto final ficou bem completo e você conseguiu reunir os principais conceitos trabalhados no curso, como consumo de API, desserialização com Gson, uso de record, tratamento de exceções e gravação do resultado em arquivo. A separação das responsabilidades entre Principal, ConsultaCep, Endereco e GeradorDeArquivo também deixa o código mais organizado.

Também foi uma boa escolha utilizar o setPrettyPrinting(), porque o JSON gerado fica mais fácil de ler quando você abre o arquivo. No tratamento da consulta, você também evitou deixar a exceção da requisição chegar diretamente ao usuário e apresentou uma mensagem mais simples.

Parabéns pelo projeto. Continue compartilhando suas soluções no fórum, porque esse tipo de projeto ajuda bastante a consolidar os conceitos vistos no curso. O fórum está à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!