Ho il seguente JSON:deserializzazione non riesce per una classe che implementa Collection con Jackson
{
"item": [
{ "foo": 1 },
{ "foo": 2 }
]
}
Questo è fondamentalmente un oggetto che contiene un insieme di elementi.
così ho fatto una classe di deserializzare che:
public class ItemList {
@JsonProperty("item")
List<Item> items;
// Getters, setters & co.
// ...
}
Tutto funziona bene fino a questo punto.
Ora, per semplificare la vita da qualche altra parte, ho deciso che sarebbe stato bello poter iterare sull'oggetto ItemList e lasciare che implementasse l'interfaccia Collection.
Quindi, in pratica la mia classe è diventato:
public class ItemList implements Collection<Item>, Iterable<Item> {
@JsonProperty("item")
List<Item> items;
// Getters, setters & co.
// Generated all method delegates to items. For instance:
public Item get(int position) {
return items.get(position);
}
}
L'applicazione funziona correttamente e bene. Tuttavia, la deserializzazione ora fallisce.
Sembra che Jackson si confondersi:
com.fasterxml.jackson.databind.JsonMappingException: Non può deserializzare istanza di com.example.ItemList fuori START_OBJECT gettone
ho ho provato ad aggiungere @JsonDeserialize(as=ItemList.class)
ma non ha funzionato.
Qual è la strada da percorrere?
Sono abbastanza sicuro che http://stackoverflow.com/users/22656/jon-skeet sarà in grado di rispondere a questa. Inoltre, potresti essere in grado di trovare alcune informazioni utili in http://stackoverflow.com/a/21279016/1382251. –
Mentre questa è una buona domanda così com'è, se tutto ciò che vuoi è iterare, perché rendere la tua classe una raccolta invece che semplicemente iterabile? – chrylis
@chrylis: così posso "(Articolo t: itemList)" –