[英]How can I serialize kotlin exposed sql dao
我在我的项目中使用了Kotlin公开的sql ,我为表创建了kotlin对象,也按示例方式创建了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应用中使用杰克逊
myDao:
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
}
}
myHandler:
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()
}
}
最简单的方法(IMHO)使用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或字段注释看起来更复杂。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.