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

使用micronaut和gorm的无限递归

欧阳向文
2023-03-14

我来自Grails背景,最近在Micronaut使用GORM启动了一个项目。

我有以下代码:

package micronaut.query.association.domain
import org.grails.datastore.gorm.GormEntity
@grails.gorm.annotation.Entity
class Author implements GormEntity<Author> {
    String name
    static hasMany = [
        books: Book
    ]
    static mapping = {
        books fetch: 'join'
    }
}

package micronaut.query.association.domain

import org.grails.datastore.gorm.GormEntity

@grails.gorm.annotation.Entity
class Book implements GormEntity<Book> {
    String name
    Author author
}

package micronaut.query.association
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.HttpStatus
import micronaut.query.association.domain.Author
import grails.gorm.transactions.ReadOnly

@groovy.transform.CompileStatic
@Controller("/author")
class AuthorController {

    @Get("/")
    @ReadOnly
    List<Author> index() {
        return Author.list()
    }
}

应用程序编译和启动没有问题,但当我尝试访问url http:localhost:8080/author时,我收到以下错误:

10:25:29.431[nioEventLoopGroup-1-2]错误i.m.h.s.netty。RoutingInBoundHandler-发生意外错误:将对象[[micronaut.query.association.domain.Author:1,micronaut.query.association.domain.Author:2]编码为JSON:Infinite recursion(StackOverflowerr)(通过引用链:micronaut.query.association.domain.Book[“Author”]-

|Micronaut版本:1.0。1 | JVM版本:1.8。0_192操作html" target="_blank">系统:Linux 4.19。4-拱1-1-拱

我做错什么了吗?谢谢,如果我的信息没有以正确的方式发布,请原谅我。这是我第一次尝试堆栈溢出。

共有1个答案

罗兴运
2023-03-14

多亏了这篇优秀的文章,我才解决了这个问题。

解决方案是使用@JsonManagedReference注释修饰Author类中的books声明,并使用@JsonBackReference注释修饰Book类中的Author声明。

 类似资料:
  • 我有一个控制器方法,它接受一个POJO。 如果我将它作为常规依赖项添加到控制器中,它将被加载(这并不奇怪),但仍然没有被使用。我是不是漏掉了一步?

  • 我尝试为API控制器编写UnitTest,它使用来自micronaut-data-jpa的CrudRepository。我使用@mockbean来模拟控制器中的协作存储库。如果我运行测试,我会得到以下错误: 没有这样的方法[findById(java.lang.object)] 我从未使用过Spock、Micronaut-Data或Micronaut-Test,只从以下来源尝试过: https:/

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

  • 所以,我的问题是:有没有办法迫使杰克逊使用getter方法?我在类上尝试了@JSONIgnoreProperties,在字段上尝试了@JSONIgore,在方法上尝试了@JSONProperty(不同的组合,都没有成功)。或者,我必须编写自己的自定义序列化程序吗? 谢了!

  • 我用的是Spring Roo 1.2.1和Jackson 1.9.7。在使用json序列化我的类时,我得到了一个JsonMappingException。 我读了以下帖子,但没有找到适合我的工作解决方案: Jackson的无限递归 Jackson-具有双方向关系的实体序列化(避免循环) 我不知道为什么JsonIgnore在属性QueueOuts的类Queue中不起作用。我也尝试了JsonManag

  • 问题内容: 我的一个朋友在Java API(https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html)中找到了这个窍门, 并通过阅读以下文章https://docs.oracle.com/javase/tutorial/java/generics/genTypes.html我可以理解上述行在语法上的含义,但是从给出的示例中我无法弄清