AJUDA - Receber Json Array com Java Spring Framework

Boa tarde pessoal, estou aprendendo a programar java e estou tentando receber um Json de uma API de League of Legends, mas não esotu conseguindo. Se puderem me dar uma ajuda, uma dica, qualquer detalhe é bem vindo… vlw

package br.com.gametips.summoner.v4;

import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class summonerv4 {
	public static void main(String[] args)  {
		SpringApplication.run(summonerv4.class, args);

		RestTemplate template = new RestTemplate();

		ResponseEntity<List<dadosleaguev4>> dadosResponse = template.exchange(
				"https://br1.api.riotgames.com/lol/league/v4/entries/by-summoner/MjnWGAeSALhIgpY62XlSr27sPg1Vewf2XGa7lUbckHxVZQ?api_key=RGAPI-0e785c69-92be-4254-92a5-84f2922dc998",
				HttpMethod.GET, null, new ParameterizedTypeReference<List<dadosleaguev4>>() {
				});
		List<dadosleaguev4> rates = dadosResponse.getBody();

		System.out.println(rates);

	}
}


A classe dadosleaguev4 está assim:

package br.com.gametips.summoner.v4;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)

public class dadosleaguev4 {
	private String tier;
	private String rank;
	
	
	public String getRank() {
		return rank;
	}
	public void setRank(String rank) {
		this.rank = rank;
	}
	public String getTier() {
		return tier;
	}
	public void setTier(String tier) {
		this.tier = tier;
	}

}

O json aberto no navegador retorna isso:

// 20211228110004
// https://br1.api.riotgames.com/lol/league/v4/entries/by-summoner/MjnWGAeSALhIgpY62XlSr27sPg1Vewf2XGa7lUbckHxVZQ?api_key=RGAPI-0

[
  {
    "leagueId": "07241ff2-e5db-4cb6-8fb2-657293e87d91",
    "queueType": "RANKED_SOLO_5x5",
    "tier": "PLATINUM",
    "rank": "IV",
    "summonerId": "MjnWGAeSALhIgpY62XlSr27sPg1Vewf2XGa7lUbckHxVZQ",
    "summonerName": "I AM JAX",
    "leaguePoints": 0,
    "wins": 720,
    "losses": 734,
    "veteran": false,
    "inactive": false,
    "freshBlood": false,
    "hotStreak": false
  },
  {
    "leagueId": "1effe3c2-4056-4295-8041-4715dba88788",
    "queueType": "RANKED_FLEX_SR",
    "tier": "GOLD",
    "rank": "IV",
    "summonerId": "MjnWGAeSALhIgpY62XlSr27sPg1Vewf2XGa7lUbckHxVZQ",
    "summonerName": "I AM JAX",
    "leaguePoints": 26,
    "wins": 5,
    "losses": 15,
    "veteran": false,
    "inactive": false,
    "freshBlood": false,
    "hotStreak": false
  }
]

Faça uma teste e tente deixar sua classe dadosleaguev4 assim:

public class dadosleaguev4 {
	private String tier;
	private String rank;

  @JsonCreator
  public dadosleaguev4(
    @JsonProperty("tier") String tier,
    @JsonProperty("rank") String rank
  ) {
    this.tier = tier;
    this.rank = rank;
  }
	
	public String getRank() {
		return rank;
	}

	public String getTier() {
		return tier;
	}
}

Altere o nome da sua classe para ficar com a primeira letra maiúscula para seguir a convenção: Dadosleaguev4

Bom dia Lucas, primeiramente muito obrigado pela sua pre-disposição em ajudar.

Fiz as alterações que você citou, mas me parece que não deu o resultado esperado =(… veja abaixo como fico após alteração e oque está sendo impresso no console:

Main:

package br.com.gametips.summoner.v4;

import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class summonerv4 {
	public static void main(String[] args) {
		SpringApplication.run(summonerv4.class, args);

		RestTemplate template = new RestTemplate();

		ResponseEntity<List<Dadosleaguev4>> dadosResponse = template.exchange(
				"https://br1.api.riotgames.com/lol/league/v4/entries/by-summoner/MjnWGAeSALhIgpY62XlSr27sPg1Vewf2XGa7lUbckHxVZQ?api_key=RGAPI",
				HttpMethod.GET, null, new ParameterizedTypeReference<List<Dadosleaguev4>>() {
				});
		List<Dadosleaguev4> rate = dadosResponse.getBody();

		System.out.println(rate);

	}
}

Classe Dadosleaguev4:

package br.com.gametips.summoner.v4;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class Dadosleaguev4 {
	private String tier;
	private String rank;

  @JsonCreator
  public Dadosleaguev4(
    @JsonProperty("tier") String tier,
    @JsonProperty("rank") String rank
  ) {
    this.tier = tier;
    this.rank = rank;
  }
	
	public String getRank() {
		return rank;
	}

	public String getTier() {
		return tier;
	}
}

Impressão no console:

[br.com.gametips.summoner.v4.Dadosleaguev4@2269a630, br.com.gametips.summoner.v4.Dadosleaguev4@1d28fec2]

não sei se esqueci de alterar algo que você citou, mas acredito que não…

Ah mano. Esse valor impresso no console significa que funcionou, porém está imprimindo o valor padrão do toString.

Se vc quiser ver os valores dessa forma, vc pode sobrescrever o toString da classe Dadosleaguev4, por exemplo:

@Override
public String toString() {
  return "[Tier: " + tier ", Rank: " + rank + "];
}

Deu certo @Lucas_Camara !

Muitíssimo obrigado pela sua ajuda !!!

1 curtida