Spring Boot Third part [Résolu]

Signaler
Messages postés
76
Date d'inscription
samedi 17 juin 2017
Statut
Membre
Dernière intervention
29 mars 2021
-
Messages postés
16302
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 avril 2021
-
Bonjour,

Je désire consommer cette API ayant la structure suivante:
status 
timestamp "2021-03-29T00:43:52.606Z"
error_code 0
error_message null

data 
    0 
        id 1
        name "Bitcoin"
        symbol "BTC"
        slug "bitcoin"
        num_market_pairs 9508
        date_added "2013-04-28T00:00:00.000Z"
        tags 
            0 "mineable"
            1 "pow"
            2 "sha-256"
            3 "store-of-value"
            4 "state-channels"
            5 "coinbase-ventures-portfolio"
            6 "three-arrows-capital-portfolio"
            7 "polychain-capital-portfolio"
            8 "binance-labs-portfolio"
            9 "arrington-xrp-capital"
            10 "blockchain-capital-portfolio"
            11 "boostvc-portfolio"
            12 "cms-holdings-portfolio"
            13 "dcg-portfolio"
            14 "dragonfly-capital-portfolio"
            15 "electric-capital-portfolio"
            16 "fabric-ventures-portfolio"
            17 "framework-ventures"
            18 "galaxy-digital-portfolio"
            19 "huobi-capital"
            20 "alameda-research-portfolio"
            21 "a16z-portfolio"
            22 "1confirmation-portfolio"
            23 "winklevoss-capital"
            24 "usv-portfolio"
            25 "placeholder-ventures-portfolio"
            26 "pantera-capital-portfolio"
            27 "multicoin-capital-portfolio"
            28 "paradigm-xzy-screener"
        quote 
            USD 
                price 55904.82315827444
                volume_24h 47201562955.85
                percent_change_1h 0.5868173
                percent_change_24h -0.56976119

D'après le log d'erreurs il n'arrive pas à lire le tableau "tags" qui est lui meme contenu dans le tableau "data" d'indice 0.Je ne sais pas comment le corriger.J'ai besoin d'aide s'il vous plait
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 287] (through reference chain: com.cryptobackend.domain.Currency["data"]->java.util.ArrayList[0]->java.util.LinkedHashMap["tags"])] with root cause

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 287] (through reference chain: com.cryptobackend.domain.Currency["data"]->java.util.ArrayList[0]->java.util.LinkedHashMap["tags"])
 at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59) ~[jackson-databind-2.11.4.jar:2.11.4]
 at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1468) ~[jackson-databind-2.11.4.jar:2.11.4]

//Entité
public class Currency {
    Map<String, String> status;

    List<Map<String,String>> data = 
      new ArrayList<Map<String,String>>();


 public Map<String, String> getStatus(){
  return status;
 }
 public void setStatus(Map<String, String> status) {
  this.status = status;
 }
 public List<Map<String, String>> getData(){
  return data;
 }
 public void setData(List<Map<String, String>> data) {
  this.data = data;
 } 
}

//Controleur
  @GetMapping("/currencies")
    public List<Currency> getCurrencies(){
      Currency currencies = restTemplate.getForObject(url, Currency.class);
     return Arrays.asList(currencies);
    }

1 réponse

Messages postés
16302
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 avril 2021
2 817
Bonjour,

Tu ne peux pas utiliser un parser JSON alors que ce que tu essaies de lire n'est pas du JSON...

Le mieux que tu puisses faire c'est :
String allDatas = restTemplate.getForObject(url, String.class);

Ensuite il faut que tu traites manuellement le String pour extraire ce dont tu as besoin.