【问题标题】:Infinite recursion using micronaut and gorm使用 micronaut 和 gorm 的无限递归
【发布时间】:2019-05-06 02:49:00
【问题描述】:

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

我有以下代码:

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: 无限 递归(StackOverflowError)(通过引用链: micronaut.query.association.domain.Book[“作者”]-

| Micronaut 版本:1.0.1 | JVM版本:1.8.0_192 操作系统:Linux 4.19.4-arch1-1-ARCH

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

【问题讨论】:

标签: micronaut


【解决方案1】:

感谢推荐的优秀文章,我能够解决问题。

解决方案是用@JsonManagedReference注解修饰Author类中的书籍声明,并用@JsonBackReference注解修饰Book类中的作者声明。

【讨论】:

  • 请注意,如果您有注入字段,例如,您会遇到非常相似的问题。一项服务。在这种情况下使用@JsonIgnore
猜你喜欢
  • 2017-06-28
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2018-02-08
  • 1970-01-01
  • 2014-11-26
相关资源
最近更新 更多