【问题标题】:How can I serialize kotlin exposed sql dao如何序列化 kotlin 暴露的 sql dao
【发布时间】:2019-05-14 09:57:01
【问题描述】:

我在我的项目中使用 kotlin exposed sql 我为我的表创建了 kotlin 对象,我还按example 中的原样创建了 DAO,所有这些都按原样工作,但是当我想要返回我的 DAO 对象列表时:

com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]->java.util.ArrayList[0]->org.jetbrains.exposed.sql.Column["table"]->org.domcek.dto.Page["columns"]....

我在我的 KTOR 应用程序中使用 jackson

我的道:

class PageDao(id: EntityID<Int>) : IntEntity(id) {
    companion object : IntEntityClass<PageDao>(Page)

    var title by Page.title
    var body by Page.body
    var parentId by Page.parentId
    var active by Page.active
    var order by Page.order
    var slug by Page.slug

    var children: List<PageDao>? = null

    fun isMyParent(pageId: Int): Boolean {
        return pageId == this.parentId
    }
}

我的处理程序:

suspend fun findAll(call: ApplicationCall) {
        val pages = pageRepository.getMainPages()

        call.respond(pages)
    }

存储库:

fun getMainPages(): List<PageDao> {
        return transaction {
            addLogger(StdOutSqlLogger)

            return@transaction PageDao.find {
                Page.active.eq(true)
                Page.parentId.isNull()
            }.toList()
        }
    }

【问题讨论】:

    标签: kotlin ktor kotlin-exposed


    【解决方案1】:

    最简单的方法(恕我直言)是使用 DTO(数据传输对象)。例如(用户 - DAO 类):

    class UserJson(val name:String=""){ constructor(user: User):this(user.name) }
    

    回复:

          get(""){
            val users = ArrayList<UserJson>()
            transaction {
                for (user in User.all())
                    users.add(UserJson(user))
            }
            call.respond(users)
        }
    

    使用 JacksonView 或字段注释看起来更复杂的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-08
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2020-07-10
      • 2019-12-08
      相关资源
      最近更新 更多