11
votes

Gson un java jetable

J'ai un objet contenant un élément de données et une exception associée.

Public class MyBean{
  Private String data;
  Private Exception problem;
.
.
.
}


1 commentaires

J'ai vécu le même problème lorsque vous essayez de sérialiser un objet avec un champ org.apache.log4j.logger.


4 Réponses :


0
votes

GSON peut gérer d'autres classes personnalisées en tant qu'attributs de votre première classe, mais utilisez-vous de cette façon?

gson.fromJson(yourResponse,MyBean.class)


1 commentaires

L'exception est une tenue dans la grève est une java.lang.Exception plaine. Il se plaint du champ d'exception lui-même.



18
votes

GSON se plaint en effet d'une erreur de référence circulaire lors de la tentative de sérialisation d'une structure de données comme décrit dans la question initiale.

L'exemple suivant montre ce point. P>

{
  "data":"some data",
  "problem":
  {
    "cause":null,
    "message":"Ack!",
    "localizedMessage":"Ack!",
    "stackTrace":
    [
      {
        "className":"com.stackoverflow.q8151082.JacksonFoo",
        "fileName":"JacksonFoo.java",
        "lineNumber":11,
        "methodName":"main",
        "nativeMethod":false
      }
    ]
  }
}


3 commentaires

Juste pour référence, voici un lien vers le problème respectif du Gson: code.google.com/p/google-gson/issues/detail?id=469 Veuillez veiller à ce que cela puisse accorder plus d'attention.


Je suggère d'utiliser RegistryTypehierarchyAdapter au lieu de RegistryTypeAdapter Etant donné que vous souhaitez probablement utiliser le sérieliseur personnalisé pour tous les sous-types d'exception.


Cela a été corrigé dans GSON V2.3.1



3
votes

Je sais que ce n'est pas la réponse à la question spécifique (qui a été répondu correctement avant plus de 2 ans) Mais:

Pour ceux qui obtiennent cette exception dans d'autres cas:

Cette erreur se produit lors de l'analyse de champ compliqué que GSON ne sait pas d'analyser.

Si vous avez besoin de ce champ dans votre classe, mais pas à des fins d'analyse et que vous souhaitez l'exclure de l'analyse GSON, vous pouvez:

  • ajoutez le @expose Annotation à tous les champs que vous souhaitez analyser , (quelque chose comme @expose ID long privé; )

  • Déclarez l'objet GSON comme celui-ci:

    gson gson = nouveau gsonbuilder (). ExcludfieldswithOutExposeAnnotation (). Créer ();

    C'est ce qui m'a aidé


0 commentaires

0
votes

J'ai également été confronté au même problème dans la version 2.2.2 de GSON. Dans GSON Version 2.6.1 Je ne vois pas ce problème.


0 commentaires