1
resposta

[Dúvida] Retorno Api http java GET()

Olá, pessoal Eu estou fazendo o Challenge conversor de moedas em java, eu fiz esse código para pegar dados de uma api que retorna o seguinte arquivo json:

{"USDBRL":{"code":"USD","codein":"BRL","name":"Dólar Americano/Real Brasileiro","high":"4.9325","low":"4.8478","varBid":"-0.0468","pctChange":"-0.95","bid":"4.8715","ask":"4.8735","timestamp":"1688763595","create_date":"2023-07-07 17:59:55"}}

o código funciona, o problema é que eu não estou conseguindo atribuir os valores da moeda no meu setMoeda();

Segue o código abaixo:

package conectaApiHttpGetPegaDadosDaMoedaMaven.d;

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection;

import com.google.gson.Gson;

public class Conecta {

private String moeda;

public String getMoeda() {
    return moeda;
}

public void setMoeda(String moeda) {
    this.moeda = moeda;
}

public static void main(String[] args) throws IOException {
    
    String dolarReal = "https://economia.awesomeapi.com.br/json/last/USD-BRL";
    
    URL url = new URL(dolarReal);
    URLConnection connection = url.openConnection();
    InputStream is = connection.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

    StringBuilder jsonMoeda = new StringBuilder();

    String valor;
    while ((valor = br.readLine()) != null) {
        jsonMoeda.append(valor);
    }
    
    Conecta valMoeda = new Gson().fromJson(jsonMoeda.toString(), Conecta.class);

    valMoeda.setMoeda(jsonMoeda.toString());
    

    System.out.println(valMoeda.getMoeda());		
    

}

}

Retorno do: System.out.println(valMoeda.getMoeda());

{"USDBRL":{"code":"USD","codein":"BRL","name":"Dólar Americano/Real Brasileiro","high":"4.9325","low":"4.8478","varBid":"-0.0468","pctChange":"-0.95","bid":"4.8715","ask":"4.8735","timestamp":"1688763595","create_date":"2023-07-07 17:59:55"}}

Desde ja, Agradeço!

1 resposta

Olá, Luciano! Como vai?

Pelo código que você compartilhou, parece que você está tendo dificuldades em atribuir os valores da moeda no método setMoeda() da classe Conecta. Vou te ajudar a resolver esse problema.

Ao analisar o retorno da API, percebo que ele é um objeto JSON com uma estrutura aninhada. Para acessar os valores desejados, você precisa navegar pelas propriedades do objeto.

No seu caso, para atribuir os valores da moeda no método setMoeda(), você pode fazer o seguinte:

  1. Crie uma classe que represente a estrutura do objeto JSON retornado pela API. Por exemplo:
public class Moeda {
    private String code;
    private String codein;
    private String name;
    private String high;
    private String low;
    private String varBid;
    private String pctChange;
    private String bid;
    private String ask;
    private String timestamp;
    private String create_date;

    // getters e setters
}
  1. No método main(), em vez de atribuir o JSON completo à variável valMoeda, você pode fazer o seguinte:
Conecta valMoeda = new Gson().fromJson(jsonMoeda.toString(), Conecta.class);
Moeda usdbrl = valMoeda.getUSDBRL();
valMoeda.setMoeda(usdbrl.getBid());

Dessa forma, você estará acessando o objeto USDBRL dentro do JSON retornado e atribuindo o valor do campo bid à propriedade moeda da classe Conecta.

Espero que isso resolva o seu problema! Se tiver mais alguma dúvida, é só perguntar.