gpt4 book ai didi

json - 暴露: How to parse JSON into an Entity class

转载 作者:行者123 更新时间:2023-12-04 19:35:37 26 4
gpt4 key购买 nike

我有以下用户表对象和实体类:

object UserTable : IntIdTable() {
val name = varchar("name", 256)
}

class User(id: EntityID<Int>): IntEntity(id) {
companion object : IntEntityClass<User>(UserTable)
val name by UserTable.name
}

有没有办法使用 Gson(或其他一些库)来解析 JSON
变成 User实例,然后插入呢?据我所知,
看来我必须创建一个中间 UserData数据类,然后手动将字段复制过来。
data class UserData {
var id: Int?
var name: String?
}

fun main() {
val data = Gson().fromJson<UserData>("...", UserData::class.java)
val user = User.new {
name = data.name
}
}

在这个人为的例子中并没有那么糟糕,但我想知道是否有更干燥的方法。

最佳答案

Exposed 不允许自己创建 DAO 对象,因为您总是需要传递 EntityID给构造函数。但是,Jackson supports reading an existing object .所以,你可以这样写:

transaction {
User.new {
mapper.readerForUpdating(this).readValue(json)
}
}

为确保 Jackson 和 Exposed 不会干扰,您必须创建 mapper像这样:
val mapper by lazy {
val mapper = jacksonObjectMapper()
mapper.setAnnotationIntrospector(object : JacksonAnnotationIntrospector() {
override fun hasIgnoreMarker(m : AnnotatedMember)
= (m.getDeclaringClass() == IntEntity::class.java)
|| (m.getDeclaringClass() == Entity::class.java)
|| super.hasIgnoreMarker(m)
})
mapper
}

另请注意,您不能输入 @JsonProperty委托(delegate)属性上的注释,但您必须使用 @get:JsonProperty .

要使用 Jackson,请将以下内容添加到您的 build.gradle文件(如果您不使用 gradle,则必须使该代码适应您的构建系统):
compile "com.fasterxml.jackson.module:jackson-module-kotlin:2.9.0"

这是一个完整的示例: https://gist.github.com/msrd0/1d8d3d76de4010cc72868d8a36f0560a

关于json - 暴露: How to parse JSON into an Entity class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48158291/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com