使用 micronaut 和 gorm 进行无限递归
Infinite recursion using micronaut and gorm
我有 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] ERROR
i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: Error
encoding object [[micronaut.query.association.domain.Author : 1,
micronaut.query.association.domain.Author : 2]] to JSON: Infinite
recursion (WhosebugError) (through reference chain:
micronaut.query.association.domain.Book["author"]-
|微航版本:1.0.1
| JVM 版本:1.8.0_192
OS: Linux 4.19.4-arch1-1-ARCH
我是不是做错了什么?
谢谢,如果我的消息没有以正确的方式发布,请原谅我。这是我第一次尝试堆栈溢出。
多亏了推荐的好文章,我才得以解决问题。
解决方案是使用 @JsonManagedReference 注释修饰作者 class 中的书籍声明,并使用 @JsonBackReference 注释修饰书籍 class 中的作者声明。
我有 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] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: Error encoding object [[micronaut.query.association.domain.Author : 1, micronaut.query.association.domain.Author : 2]] to JSON: Infinite recursion (WhosebugError) (through reference chain: micronaut.query.association.domain.Book["author"]-
|微航版本:1.0.1 | JVM 版本:1.8.0_192 OS: Linux 4.19.4-arch1-1-ARCH
我是不是做错了什么? 谢谢,如果我的消息没有以正确的方式发布,请原谅我。这是我第一次尝试堆栈溢出。
多亏了推荐的好文章,我才得以解决问题。
解决方案是使用 @JsonManagedReference 注释修饰作者 class 中的书籍声明,并使用 @JsonBackReference 注释修饰书籍 class 中的作者声明。