Fala galera, tudo bem?
Só compartilhando aqui como ficou meu projeto final (consumindo API de CEPs):
- Classe para requisição HTTP e montagem do meu objeto:
package br.com.alura.cepbrowserfinal.apis;
import br.com.alura.cepbrowserfinal.excecoes.CepInvalidoException;
import br.com.alura.cepbrowserfinal.modelos.Endereco;
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 Http {
private String urlCep = "https://viacep.com.br/ws/";
private Endereco meuEndereco;
public Http (String cep) throws IOException, InterruptedException {
urlCep += cep + "/json";
HttpClient client = HttpClient.newHttpClient();
try {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(urlCep))
.build();
HttpResponse<String> response = client
.send(request, HttpResponse.BodyHandlers.ofString());
//vou gerar uma exceção se der erro 400 - CEP inválido
if (response.statusCode() == 400) {
throw new CepInvalidoException("Cep inválido!");
}
System.out.println("\nDados brutos: ");
System.out.println(response.body());
System.out.println("\nDados a serem guardados: ");
Gson gson = new Gson();
meuEndereco = gson.fromJson(response.body(),Endereco.class);
System.out.println(meuEndereco);
} catch (CepInvalidoException c) {
System.out.println(c.getMessage());
} catch (Exception e) {
System.out.println("\nAconteceu um problema");
}
}
public Endereco getMeuEndereco() {
return meuEndereco;
}
}
- Classe da Exceção criada:
package br.com.alura.cepbrowserfinal.excecoes;
public class CepInvalidoException extends RuntimeException {
private String mensagem;
public CepInvalidoException(String mensagem) {
this.mensagem = mensagem;
}
@Override
public String getMessage() {
return this.mensagem;
}
}
- Classe para gerar o JSON:
package br.com.alura.cepbrowserfinal.apis;
import br.com.alura.cepbrowserfinal.modelos.Endereco;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.FileWriter;
import java.io.IOException;
public class GeradorJson {
public GeradorJson (Endereco meuEndereco) throws IOException {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
FileWriter cepJsonFinal = new FileWriter("cepJsonFinal.json");
cepJsonFinal.write(gson.toJson(meuEndereco));
cepJsonFinal.close();
}
}
- Record para mapeamento dos dados:
package br.com.alura.cepbrowserfinal.modelos;
public record Endereco(String cep, String logradouro, String complemento, String bairro, String localidade, String uf) {
}
- Classe principal:
package br.com.alura.cepbrowserfinal.principal;
import br.com.alura.cepbrowserfinal.apis.GeradorJson;
import br.com.alura.cepbrowserfinal.apis.Http;
import br.com.alura.cepbrowserfinal.modelos.Endereco;
import java.io.IOException;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner sc = new Scanner(System.in);
System.out.print("Digite um CEP para busca (somente números): ");
String cep = sc.nextLine();
Http requisicaoHttp = new Http(cep.replace(" ","").replace(".","").replace("-","").replace("_",""));
System.out.println("\nOs dados foram armazenados no arquivo (cepJsonFinal.json)!");
GeradorJson geraJson = new GeradorJson(requisicaoHttp.getMeuEndereco());
sc.close();
}
}
Valeu!!