我想在 Quarkus 应用程序中向 Jackson 注册 Kotlin 模块,以便 Jackson 可以将 JSON 反序列化为数据类,而不需要 NoArgsConstructor。最好的方法是什么?
评论后更新
该应用程序是用 Kotlin 编写的 REST 服务。在 API 级别,我们使用 View 类(例如 PersonView 或 PersonWriteView)从服务上的模型和实体中进行抽象。持久层。为了减少开销,同时仍然获得漂亮且有意义的 equals() 和 hashcode() 函数,我们为此使用数据类
。
在普通设置中,Jackson 无法直接反序列化为数据类,因为它需要一个空构造函数。这可以通过应用无参数编译器插件并添加注释来进行猴子修补,例如@NoArgConstructor
与 Lombok 提供的类似。但当然这样我们就必须在 API 中对每个数据类进行注释,这很容易出错。
对此更好的解决方案是包含 com.fasterxml.jackson.module:jackson-module-kotlin,它可以为您提供奇妙的 KotlinModule。在此之后mapper.treeToValue()
可以直接创建data class
实例,而不需要空构造函数。
为此,我们必须向 ObjectMapper 注册模块,例如通过ObjectMapper().findAndRegisterModules()
。我想知道的是如何配置 Resteasy 使用的 ObjectMapper 将 JSON 解码为对象。
最佳答案
您可以尝试向请求模型类添加@JsonbCreator
注释。因此,在这种情况下,JSON-B 将尝试使用构造函数来创建对象,而不是使用无参数/反射
例如:
data class MyRequest @JsonbCreator constructor(
@JsonbProperty("propertyOne") val propertyOne: String,
@JsonbProperty("propertyTwo") val propertyTwo: : String
)
关于kotlin - 如何在 Quarkus 中注册 Jackson 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008117/