Spring Boot Third part
Résolu
Bonjour,
Je désire consommer cette API ayant la structure suivante:
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
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
-
ModérateurBonjour,
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.