J'ai créé le service Web suivant juste pour apprendre:Jackson Liste <Object> à cordes
@GET
@Path("/tmp/uno")
@Produces(MediaType.APPLICATION_JSON)
public ArrayList<Object> getData() {
KeyValue<Integer, Integer> kv = new KeyValue<>(1, 2);
List<KeyValue> list = new ArrayList<>();
list.add(kv);
**return new ArrayList<Object>(list);**
}
que je fais le casting juste pour des fins de test et je reçois l'erreur suivante:
sep 20, 2017 5:53:17 PM org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor aroundWriteTo
SEVERE: MessageBodyWriter not found for media type=application/json, type=class java.util.ArrayList, genericType=java.util.ArrayList<java.lang.Object>.
Si je ne mets pas la liste
@GET
@Path("/tmp/uno")
@Produces(MediaType.APPLICATION_JSON)
public **List<KeyValue>** getData() {
KeyValue<Integer, Integer> kv = new KeyValue<>(1, 2);
List<KeyValue> list = new ArrayList<>();
list.add(kv);
**return list;**
}
Je reçois la réponse suivante:
[
{
"key": {
"type": "int",
"value": 1
},
"value": {
"type": "int",
"value": 2
}
}
]
J'ai deux questions 1.- Pourquoi je ne peux pas répondre à une liste d'objets? 2.- Pourquoi chaque propriété a son type de données dans le jSON?
La classe keyValue est la suivante:
public class KeyValue<X, Y> {
private X key;
private Y value;
public KeyValue() {
// Auto-generated constructor stub
}
public KeyValue(X key, Y value) {
this.key = key;
this.value = value;
}
public X getKey() {
return key;
}
public Y getValue() {
return value;
}
public void setKey(X key) {
this.key = key;
}
public void setValue(Y value) {
this.value = value;
}
}
Ma dépendance Jackson est:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.26</version>
</dependency>