1

私は 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] エラー imhsnetty.RoutingInBoundHandler - 予期しないエラーが発生しました: オブジェクトのエンコード中にエラーが発生しました [[micronaut.query.association.domain.Author : 1, micronaut.query.association.domain.Author : 2] ] から JSON へ: 無限再帰 (StackOverflowError) (参照チェーン経由: micronaut.query.association.domain.Book["author"]-

| | バージョン: 1.0.1 | JVM バージョン: 1.8.0_192 OS: Linux 4.19.4-arch1-1-ARCH

私は何か間違ったことをしていますか?ありがとうございます。私のメッセージが正しい方法で投稿されていない場合は、ご容赦ください。これは、スタック オーバーフローでの私の最初の試みです。

4

1 に答える 1

1

提案された優れた記事のおかげで、問題を解決できました。

解決策は、Author クラスの book 宣言を @JsonManagedReference アノテーションで装飾し、Book クラスの author 宣言を @JsonBackReference アノテーションで装飾することでした。

于 2018-12-07T12:04:30.817 に答える