[JAVA - PT-BR] CONSUMINDO UMA API DE CEP
Eduardo Teixeira
Posted on October 22, 2022
Recentemente resolvi aprender um pouco mais sobre a programação em Java e desde então tenho consultado bastante conteúdo usar esta linguagem com foco no consumo e desenvolvimento de API's.
CONSUMINDO UME ENDPOINT
Um endpoint é o endereço utilizado para poder fazer requisições a um servidor, neste caso temos o exemplo abaixo para a nossa integração.
viacep.com.br/ws/01001000/json/
Vamos utilizar algumas ferramentas para poder realizar o teste das requisições, neste caso será utilizado o Postman, eu gosto de utilizar a plataforma pois dá um suporte a documentação entre outras ferramentas que podem ser utilizadas para fazer requisições.
Retorno obtido:
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
Com base no retorno que tivemos vamos acessar o site JsonSchema2 para criarmos o nosso projeto em Java, basicamente é uma ferramenta que faz o mapeamento do retorno JSON e com isto cria as variáveis, métodos de encapsulamento para que podemos utilizar após o retorno obtido da API.
Após isto, clique em preview e veja se obteve um resultado semelhante a este:
Clique na opção zip para baixar o projeto.
Após obter o código do projeto, vamos extrair e para manipular o arquivo estarei utilizando a ferramenta Eclipse.
| Como abrir um projeto no Eclipse
Com o projeto aberto, localize a classe gerada e remova essa anotação @Generated("jsonschema2pojo")
e o import
import javax.annotation.Generated;
pois ela não será útil, perceba que a plataforma gerou os métodos getteers e setteers e já está pronto para uso.
Classe Endereco
package br.consultacep;
import java.util.HashMap;
import java.util.Map;
public class Endereco {
private String cep;
private String logradouro;
private String complemento;
private String bairro;
private String localidade;
private String uf;
private String ibge;
private String gia;
private String ddd;
private String siafi;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getLogradouro() {
return logradouro;
}
public void setLogradouro(String logradouro) {
this.logradouro = logradouro;
}
public String getComplemento() {
return complemento;
}
public void setComplemento(String complemento) {
this.complemento = complemento;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getLocalidade() {
return localidade;
}
public void setLocalidade(String localidade) {
this.localidade = localidade;
}
public String getUf() {
return uf;
}
public void setUf(String uf) {
this.uf = uf;
}
public String getIbge() {
return ibge;
}
public void setIbge(String ibge) {
this.ibge = ibge;
}
public String getGia() {
return gia;
}
public void setGia(String gia) {
this.gia = gia;
}
public String getDdd() {
return ddd;
}
public void setDdd(String ddd) {
this.ddd = ddd;
}
public String getSiafi() {
return siafi;
}
public void setSiafi(String siafi) {
this.siafi = siafi;
}
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
Crie uma outra classe para converter JSON em String, neste caso eu criei a Util, vamos precisar também de uma biblioteca gson pois nela terá uma classe e métodos que auxiliará na conversão.
package br.utilitarios;
import java.io.BufferedReader;
import java.io.IOException;
public class Util {
public static String converteJsonEmString(BufferedReader buffereReader) throws IOException {
String resposta, jsonString = "";
while ((resposta = buffereReader.readLine()) != null) {
jsonString += resposta;
}
return jsonString;
}
}
Crie uma nova classe para podermos fazer a requisição da API, neste exemplo eu criei a IntegracaoAPI:
package br.consultacep;
import br.utilitarios.Util;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class IntegracaoAPI {
public static Endereco buscaCep (String cep) throws Exception {
String enderecoURL = "https://viacep.com.br/ws/" + cep + "/json/";
URL url = new URL(enderecoURL);
HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
conexao.setRequestMethod("GET");
conexao.setDoInput(true);
try {
BufferedReader buff = new BufferedReader(new InputStreamReader((conexao.getInputStream()), "utf-8"));
String convertJsonString = Util.converteJsonEmString(buff);
Gson gson = new Gson();
Endereco endereco = gson.fromJson(convertJsonString, Endereco.class);
return endereco;
} catch (Exception msgErro) {
throw new Exception("Erro de conexão- status Code [" + conexao.getResponseCode() + "]. " + msgErro.toString());
}
}
}
DEBUG CLASS INTEGRAÇÃO API
- Foi criado uma método que recebe como parâmetro um cep e retorna uma classe do tipo Endereço.
- Em seguida, foi aberto uma conexão e obtemos um retorno que é armazenado na variável
buff
, com isto é necessário que haja uma conversão do de JSON para String e com isto realizarmos a manipulação dos dados. - Quando retornado os dados o método fromJson faz um mapeamento do que foi retornado com a nossa classe Endereço, sendo assim os atributos e variáveis devem ter os mesmos nomes para que haja pontos em comuns e com isto manipular os dados corretamente.
Por último, crie uma classe para exibir os dados retornados da API:
package br.consultacep;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) throws Exception {
System.out.print("Informe seu CEP: ");
String cep = new Scanner(System.in).nextLine();
Endereco endereco = IntegracaoAPI.buscaCep(cep);
System.out.println("CEP Consultado: ");
System.out.println("Complemento: ");
System.out.println("Logradouro: " + endereco.getLogradouro());
System.out.println("Bairro: " + endereco.getBairro());
System.out.println("Localidade: " + endereco.getLocalidade());
System.out.println("DDD: " + endereco.getDdd());
}
}
Basta executar o projeto e informar um CEP, o resultado será este:
Clonagem de repositório:
https://github.com/EDUARDO-TEIXEIRA/ConsultaCEP-API.git
Referências
Posted on October 22, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.