Ne peut pas par exemple deserialize de java.lang.Class de jeton START_OBJECT

StackOverflow https://stackoverflow.com/questions/3156674

  •  01-10-2019
  •  | 
  •  

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top