【发布时间】:2016-10-15 20:35:49
【问题描述】:
我有一个用来存储工具首选项的类。此类使用 toString() 将自身转换为 JSON。当我将对象转换为 JSON 时,我遇到了这个无限递归错误,我不知道为什么。我没有任何循环引用,所以这让我有点困惑。任何帮助将不胜感激。
这是我的班级结构:
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;
}
}
这是我收到的异常 sn-p:
com.fasterxml.jackson.databind.JsonMappingException:无限递归(StackOverflowError)(通过引用链:java.awt.Point["location"]->java.awt.Point["location"]->java.awt .Point["location"]->java.awt.Point["location"]...) 在 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(BeanPropertyWriter.java:464) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:504) 在 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:117)
【问题讨论】:
-
尝试从 toString() 中删除 @JsonIgnore;
-
它最初不存在,所以我添加它以查看它是否会解决它,但它没有:(
-
您的问题似乎出在您正在导入的
Point类中......也许这会有所帮助:impossible-is-development.blogspot.co.uk/2012/08/…
标签: java json recursion jackson infinite