2011-12-22 11:15:58 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet spring threw exception org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]->org.hibernate.collection.PersistentBag[0]->com.blog.pojo.Photo["album"]->com.blog.pojo.Album["photos"]) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:189) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:442) at org.codehaus.jackson.map.ser.ContainerSerializers$CollectionSerializer.serializeContents(ContainerSerializers.java:383) at org.codehaus.jackson.map.ser.ContainerSerializers$AsArraySerializer.serialize(ContainerSerializers.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142) at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:428) at org.codehaus.jackson.map.ser.BeanSerializer.serializeFields(BeanSerializer.java:175) at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:142)
这里两个实体类: Album(相册) 和 photo(照片) 是一对多双向关联
死循环原因: JSON无法对Album的photos属性进去JSON转换
解决办法:
在Album实体类上加注释@JsonIgnoreProperties(value={"photos"})
@Entity @SuppressWarnings("serial") @JsonIgnoreProperties(value={"photos"}) public class Album implements java.io.Serializable {
结束!