Jackson JSON + Java Génériques
Je suis en train de désérialiser/carte ci-dessous JSON à List<Bill
> objet java à l'aide de Jackson librairie json. (json a été généré par jackson, Iam en omettant que le morceau par souci de concision)
{"bills":[{"amount":"13","billId":"billid3"}]}
Voici ma méthode de conversion:
private static void convert(){
String jsonBill = "{\"bills\":[{\"amount\":\"13\",\"billId\":\"billid3\"}]}";
ObjectMapper mapper = new ObjectMapper();
List<Bill> bills = null;
try {
bills = mapper.readValue(jsonBill, new TypeReference<List<Bill>>() { });
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("bills = " + bills.size());
}
Le projet de Loi entité est ci-dessous:
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public class Bill {
private String amount;
private String billId;
public String getBillId() {
return billId;
}
public void setBillId(String billId) {
this.billId = billId;
}
public String getAmount() {
return amount;
}
public void setAmount(String amount) {
this.amount = amount;
}
}
et j'obtiens cette erreur:
**org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of START_OBJECT token
at [Source: java.io.StringReader@7a84e4; line: 1, column: 1]**
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:160)
at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:194)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:103)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:93)
at org.codehaus.jackson.map.deser.CollectionDeserializer.deserialize(CollectionDeserializer.java:25)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1980)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1278)
Voici mon simplifié spring3 contrôleur qui renvoie le i/p json (avec Jackson cartographie configuré comme vue par défaut):
@ModelAttribute("bills")
@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Bill> fetchBills() throws IOException {
Bill bill = new Bill();
bill.setAmount("13");
bill.setBillId("billid3");
List<Bill> bills = new ArrayList<Bill>();
bills.add(bill);
return bills;
}
Je suppose que je suis absent quelque chose d'évident.. mais vous ne savez pas ce que c'est.. des idées?
source d'informationauteur Ravi
Vous devez vous connecter pour publier un commentaire.
Le problème ne réside pas dans votre code, mais votre exemple d'entrée. Ce que vous êtes en train d'essayer de désérialiser un objet avec un champ nommé "factures", et non une liste! Ce que vous devriez être en utilisant comme entrée est:
C'est un tableau d'objets, qui est ensuite converti en une liste.
Essayez d'utiliser ObjectWriter au lieu de ObjectMapper
Je suis en utilisant jackson 1.9.2