2012-07-09 98 views
1

我使用Spring Roo 1.2.1和Jackson 1.9.7。 在序列化我的QueueOut與JSON我得到一個JsonMappingException。json無限遞歸與春天roo

我閱讀下面的職位,但發現沒有我工作的解決方案:

Infinite Recursion with Jackson

Jackson - serialization of entities with birectional relationships (avoiding cycles)

我不知道爲什麼JsonIgnore沒有在類隊列工作性質QueueOuts 。我也試過JsonManagedReference,但同樣的錯誤。使用Jackson 2.0.0並不是解決方案,因爲它不受Spring 3.1支持。

有什麼建議嗎?

這裏我堆棧跟蹤的一部分:

Caused by: org.springframework.amqp.support.converter.MessageConversionException: Failed to convert Message content 
    at org.springframework.amqp.support.converter.JsonMessageConverter.createMessage(JsonMessageConverter.java:181) 
    at org.springframework.amqp.support.converter.AbstractMessageConverter.toMessage(AbstractMessageConverter.java:51) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.convertMessageIfNecessary(RabbitTemplate.java:482) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:358) 
    at org.springframework.amqp.rabbit.core.RabbitTemplate.convertAndSend(RabbitTemplate.java:346) 
    at de.company.prs.admin.server.amqp.AdminQueueConsumer.onMessage(AdminQueueConsumer.java:52) 
    at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:328) 
    at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:505) 
    ... 10 more 
Caused by: org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0]->de.company.prs.admin.server.domain.QueueOut["queue"]->de.company.prs.admin.server.domain.Queue["queueOuts"]->org.hibernate.collection.PersistentSet[0] 
    at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:164) 
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) 
    at org.codehaus.jackson.map.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:446) 
    at org.codehaus.jackson.map.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:150) 
    at org.codehaus.jackson.map.ser.BeanSerializer.serialize(BeanSerializer.java:112) 

這裏我的課: 首先

@RooJavaBean 
@RooToString 
public class QueueOut { 

    private String name; 

    private String description; 

    @JsonIgnore 
    @ManyToOne 
    private GenericQueue genericQueue; 


    @ManyToOne (fetch = FetchType.EAGER) 
    private Queue queue; 

} 

@RooJavaBean 
@RooToString 
@RooJpaActiveRecord 
public class Queue { 

    private String name; 

    private String description; 

    @JsonIgnore 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "queue", fetch = FetchType.EAGER) 
    private Set<QueueOut> QueueOuts = new HashSet<QueueOut>(); 
} 

回答

0

使用@JsonIgnore OD你的問題的性質的干將使用@JsonIgnoreProperties(值= {「PROPERTYNAME」})

3

你必須使用@JsonIgnore您的getter

吸氣劑