J'ai cette classe que j'utilise pour stocker les préférences pour un outil. Cette classe utilise toString() pour se convertir en JSON. J'obtiens cette erreur de récursion infinie quand je convertis l'objet en JSON, et je n'arrive pas à comprendre pourquoi. Je n'ai pas de références circulaires donc cela me déroute un peu. Toute aide serait appréciée.Infinite Récursivité lors de la conversion de l'objet en JSON en utilisant Jackson
Voici ma structure de classe:
public class ToolPrefs
{
private boolean isFloating;
private ToolPalettePlacement placement; //this is an enum
private boolean isSelected;
private int dockLocation;
private Point dialogLocation;
private Dimension dialogSize;
public ToolPrefs(){}
public boolean isFloating(){return isFloating; }
public void setFloating(boolean floating){ isFloating = floating; }
public ToolPalettePlacement getPlacement(){ return placement; }
public void setPlacement(ToolPalettePlacement placement){ this.placement = placement;}
public boolean isSelected(){ return isSelected;}
public void setSelected(boolean selected){isSelected = selected;}
public int getDockLocation(){return dockLocation;}
public void setDockLocation(int dockLocation){this.dockLocation = dockLocation; }
public Point getDialogLocation(){return dialogLocation;}
public void setDialogLocation(Point dialogLocation){ this.dialogLocation = dialogLocation;}
public Dimension getDialogSize(){ return dialogSize; }
public void setDialogSize(Dimension dialogSize){this.dialogSize = dialogSize;}
@JsonIgnore @Override
public String toString()
{
String json;
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
try
{
json = ow.writeValueAsString(this);
}
catch (IOException e)
{
e.printStackTrace();
json = "";
}
return json;
}
}
Voici l'extrait d'exception que je reçois:
com.fasterxml.jackson.databind.JsonMappingException: Infinite récursion (par référence (StackOverflowError) chaîne: java.awt.Point ["emplacement"] -> java.awt.Point ["emplacement"] -> java.awt.Point ["emplacement"] -> java.awt.Point ["emplacement"] .. .) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:518) à com.fasterxml.jackson.databind.ser.BeanSerializer.serialize (BeanSerializer.java:117) à com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField (BeanPropertyWriter.java:464) à com.fasterxml.jackson. databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:504) à com.fasterxml.jackson.databind.ser.BeanSerializer.serialize (BeanSerializer.java:117) à com.fasterxml.jackson.databind.ser. BeanPropertyWriter.serializeAsField (BeanPropertyWriter.java:464) à com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:504) à com.fasterxml.jackson.databind.ser.BeanSerializer.serialize (BeanSerializer.java:117) à com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField (BeanPropertyWrit er.java:464) à com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields (BeanSerializerBase.java:504) à com.fasterxml.jackson.databind.ser.BeanSerializer.serialize (BeanSerializer.java: 117)
essayez de supprimer @JsonIgnore de toString(); –
Il n'était pas là initialement, donc je l'ai ajouté pour voir si cela résoudrait mais il n'a pas :( – ShakMan
il semble que votre problème est dans la classe 'Point' que vous importez ... peut-être cela pourrait aider : http://impossible-is-development.blogspot.co.uk/2012/08/jackson-jsonmappingexception-infinite.html – thoeni