有没有办法让Kotlin值类(更新的内联类)与Jackson和Hibernate这样的库一起工作,并让它们将值类简单地视为底层类型?
目前,我收到一堆错误,说该类型没有默认构造函数(这是有意义的,因为据我所知,它实际上只是底层类型的 Package 器)。
我得到的所有异常都是运行时错误,所以在编译时没有警告会发生这种情况。
我假设这些问题是相关的,因为在这两种情况下,我都会收到错误消息,指出类型缺少空构造函数。
我很抱歉,如果我的问题是有点不清楚,我一直在挖掘这个数小时没有真正取得任何进展。
我想要完成的是(例如对于hib):
value class Name(val name: String)
@Entity
@Table(name = "my_table")
class MyTable(
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
val id: UUID = UUID.randomUUID(),
@Column(name = "name", nullable = false)
val name: Name = Name("John")
)
并让它在与数据库通信时将name
简单地视为字符串。
我使用基于http 4k和Jackson的堆栈进行REST通信,并且在表单上有请求/响应实体
data class MyRestObject(val id: UUID, val name: Name)
这和我对响应的预期一样,生成的响应json看起来像:
{
"id": UUID,
"name": String
}
但是,它不适用于请求。
Jackson的例外示例:Cannot construct instance of
component.Name(no Creators, like default constructor, exist): no String-argument constructor/factory method to deserialize from String value ('foerijfm')
1条答案
按热度按时间irlmq6kh1#
对于Jackson,可以使用
@JsonCreator
注解来注解要使用的构造函数。或者,可以为ObjectMapper
中的类型注册Deserializer
。对于Hibernate ORM,您可以使用JPA属性转换器。