Ne peut pas par exemple deserialize de java.lang.Class de jeton START_OBJECT
Question
Je ne peux pas comprendre propperly l'erreur que je reçois quand je lance ce code:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename);
String jsonTxt = IOUtils.toString(is);
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt);
JSONObject metadatacontent = json.getJSONObject(0);
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(metadatacontent.toString(), MetadataContentBean.class.getClass());
Erreur:
org.codehaus.jackson.map.JsonMappingException: Ne peut pas désérialiser instance de java.lang.Class sur START_OBJECT jeton à [Source: java.io.StringReader@e3b895; ligne 1, colonne: 1] à org.codehaus.jackson.map.JsonMappingException.from (JsonMappingException.java:159) à org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException (StdDeserializationContext.java:192) à org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize (StdDeserializer.java:439) à org.codehaus.jackson.map.deser.StdDeserializer $ ClassDeserializer.deserialize (StdDeserializer.java:421) à org.codehaus.jackson.map.ObjectMapper._readMapAndClose (ObjectMapper.java:1588) à org.codehaus.jackson.map.ObjectMapper.readValue (ObjectMapper.java:1116) à com.path.parser.JSon.Parser (JSon.java:65) à com.path.parser.JSon.main (JSon.java:29)
Qu'est-ce que cela signifie ??
Peut-être que si je sais que cela, je ne pouvais trouver mon erreur.
La solution
Votre problème est la dernière ligne:
MetadataContentBean.class.getClass()
Ce moyen « me faire l'objet Class
pour la classe MetadataContentBean, puis me faire l'objet Class
pour cet objet Class
» .... si vous voyez ce que je veux dire. Donc, vous demandez Jackson désérialiser votre JSON sur un objet Class
, qu'il ne sait pas comment faire.
Cela devrait être juste
MetadataContentBean.class
Autres conseils
Ceci est probablement lié à l'autre question, mais juste pour compléter la réponse, l'erreur provient de divergence: le type « java.lang.Class » est sérialisé en tant que chaîne JSON (nom de la classe elle-même), et non comme objet JSON comme les haricots sont. Donc, attend de désérialiseur pour voir une chaîne JSON, voit à la place d'un objet JSON (qui commence par START_OBJECT) et émet une exception.