Бесконечная рекурсия с использованием микронавта и горм - PullRequest
0 голосов
/ 04 декабря 2018

Я родом из Граилса и недавно начал проект в 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] ОШИБКА imhsnetty.RoutingInBoundHandler - Произошла непредвиденная ошибка:Ошибка кодирования объекта [[micronaut.query.association.domain.Author: 1, micronaut.query.association.domain.Author: 2]] в JSON: бесконечная рекурсия (StackOverflowError) (через цепочку ссылок: micronaut.query.association.domain.Book ["author"] -

| Версия Micronaut: 1.0.1 | Версия JVM: 1.8.0_192 ОС: Linux 4.19.4-arch1-1-ARCH

AmЯ делаю что-то не так? Спасибо и, пожалуйста, прости меня, если мое сообщение было отправлено неправильно. Это моя первая попытка переполнения стека.

1 Ответ

0 голосов
/ 07 декабря 2018

Благодаря превосходной предложенной статье я смог решить проблему.

Решением было украсить объявление книг в классе Author с помощью аннотации @JsonManagedReference и украсить объявление автора в классе Book с помощьюаннотация @JsonBackReference.

...