Jam*_*ame 2 java json spring-mvc jackson
我有以下型号:
public class CategoryModel {
public String id;
public String name;
public String imageUrl;
public CategoryModel parent;
public List<CategoryModel> childrens = new ArrayList<CategoryModel>();
}
Run Code Online (Sandbox Code Playgroud)
我使用Spring MVc + jackson返回Json.
我的动作构建了以下模型,在执行之后,我得到了stackoverflow异常.
List<CategoryModel> allCategories = new ArrayList<CategoryModel>();
CategoryModel model = new CategoryModel();
model.id = "1";
model.name = "category 1";
CategoryModel model1 = new CategoryModel();
model.id = "2";
model.name = "category 1.1";
model.childrens.add(model1);
model1.parent = model;
allCategories.add(model);
Run Code Online (Sandbox Code Playgroud)
知道我的问题是什么吗?
这是日志文件(其中的一部分):
在org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)在org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)在org.codehaus.jackson .map.ser.BeanSerializer.serialize(BeanSerializer.java:112)在org.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:122)在org.codehaus.jackson.map.ser位于org.codehaus.jackson.map.ser.BeanPropertyWriter的org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)的.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:71)位于org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java)的org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)中的.serializeAsField(BeanPropertyWriter.java:446) :112)at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanProp)ertyWriter.java:446)org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) at org.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:122)at org.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:71)在org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java:86)在org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)在org.codehaus.jackson .map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)在org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)在org.codehaus.jackson.map.ser.BeanPropertyWriter .serializeAsField(BeanPropertyWriter.java:446)位于org.codehaus.jackson.map.ser.std.BeanSerializerBase.序列化文件(BeanSerializerBase.java:150)位于org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112)org.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers. java:122)org.codehaus.jackson.map.ser.std.StdContainerSerializers $ indexedListSerializer.serializeContents(StdContainerSerializers.java:71)at org.codehaus.jackson.map.ser.std.AsArraySerializerBase.serialize(AsArraySerializerBase.java: 86)在org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)在org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150)在org.codehaus位于org.codehaus.jackson.map.ser.std的org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446)的.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) org.codehaus.jackson.map.ser中的.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150).beanSerialhaus.serialize(BeanSerializer.java:112)atg.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:122)at org.codehaus.jackson.map.ser.std.StdContainerSerializers $ IndexedListSerializer.serializeContents(StdContainerSerializers.java:71)引起:java.lang.StackOverflowError
正如drorb所提到的,循环引用就是问题.但是,不应使用@JsonIgnore注释,而应使用@JsonBackReference来指示循环引用.使用此注释,Jackson可以在反序列化时映射到正确的父级.
| 归档时间: |
|
| 查看次数: |
2800 次 |
| 最近记录: |