kotlin - 如何在 Quarkus 中注册 Jackson 模块?

标签 kotlin resteasy jackson-modules quarkus

我想在 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/

相关文章:

java - android-manifest 中的 android.stamp 是什么?

algorithm - 如何确保 RNG 结果出现的次数最少?

android - 在 Kotlin 中使用泛型时发现类型不匹配

java - RESTEasy - 访问 Web 文件夹以获取图像

java - Jackson 的 StdDeserializer 的构造函数中使用的 Class<?> vc 或 JavaType valueType 是什么

android - 如何从 Android Studio 运行单个 Kotlin 类

java - 使用 RESTEasy 处理格式错误的@QueryParam

java - 使用 JAXB 将子类实例作为父类(super class)传递

json - Jackson Kotlin - 反序列化 JsonNode

java - 使用 JDK 11 时是否需要注册 JavaTimeModule?