当前位置: 首页 > 知识库问答 >
问题:

带Springroo的json无限递归

岳亮
2023-03-14

我用的是Spring Roo 1.2.1和Jackson 1.9.7。在使用json序列化我的类时,我得到了一个JsonMappingException。

我读了以下帖子,但没有找到适合我的工作解决方案:

Jackson的无限递归

Jackson-具有双方向关系的实体序列化(避免循环)

我不知道为什么JsonIgnore在属性QueueOuts的类Queue中不起作用。我也尝试了JsonManaged参考,但同样的错误。使用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>();
}

共有3个答案

暴才俊
2023-03-14

在getter od上使用@JsonIgnore完全忽略使用@JsonIgnoreProperties(value={“propertyName”})的属性

宦砚
2023-03-14

不要使用JsonIgnore,从1.9开始,在问题属性的getter上使用JsonManagedReference和JsonBackReference。你可以在以下网站上看到两个很好的例子:

  • http://vard-lokkur.blogspot.com.es/2010/10/json-jackson-to-rescue.html
管和志
2023-03-14

你必须在getter上使用@JsonIgnore

 类似资料:
  • 在尝试执行GET到发布者存储库时,我正在执行GET和无限循环。 出版商: 书: 完整代码可在此处获得: https://github.com/vanyasav/library

  • 当尝试将具有双向关联的JPA对象转换为JSON时,我不断得到 我所发现的就是这条线索,它的基本结论是建议避免双向关联。有没有人有办法解决这个spring bug? ------编辑2010-07-24 16:26:22------- 代码片段: 业务对象1: 业务对象2: 控制器: JPA-见习DAO的实施: 坚持不懈xml

  • 问题内容: 当尝试将具有双向关联的JPA对象转换为JSON时,我不断 我所发现的只是该线程,基本上以建议避免双向关联为结尾。有谁知道这个春季错误的解决方法? ------编辑2010-07-24 16:26:22 ------- 代码段: 业务对象1: 业务对象2: 控制器: JPA实施学员DAO: persistence.xml 问题答案: 您可以使用它来打破循环。

  • 问题内容: 尝试将具有双向关联的JPA对象转换为JSON时,我不断 我所发现的只是该线程,基本上以建议避免双向关联为结尾。有谁知道这个Spring错误的解决方法? 代码段: 业务对象1: 业务对象2: 控制器: JPA实施学员DAO: persistence.xml 问题答案: 你现在可以使用JsonIgnoreProperties到属性(序列化过程中)的抑制序列,或忽略JSON性能的处理读取(反

  • 我使用Google Endpoint创建了一个应用服务器,它是一个即时消息应用程序的后端。每个用户都有一个好友列表。 当我创建一个新朋友时,我使用下面的方法将用户添加到彼此的朋友列表中。然而,由于循环依赖关系,当我添加朋友时,它给了我以下错误。 我看了贴出的其他问题和解决方案。他们中的大多数人结构不同,他们没有解决我的问题。 这个网站的一个答案是建议添加,但我没有任何字段可以添加。我试图放置,但我

  • 我来自Grails背景,最近在Micronaut使用GORM启动了一个项目。 我有以下代码: 应用程序编译和启动没有问题,但当我尝试访问url http:localhost:8080/author时,我收到以下错误: 10:25:29.431[nioEventLoopGroup-1-2]错误i.m.h.s.netty。RoutingInBoundHandler-发生意外错误:将对象[[micron