KotlinModule 为私有的 Kotlin 升级问题

问题描述 投票:0回答:1

我们正在尝试将我们的项目从 JDK 11 迁移到 JDK 17。但是 Kotlin 版本甚至更旧!该应用程序到处都使用 Kotlin 1.4.0。因此,在迁移过程中,我们也决定升级 Kotlin。

因此,当我将 pom 文件中的 JAR 依赖项从 1.4.0 更新到 2.0.21 时,一个类确实喜欢这种更改,并抛出如下异常:

[ERROR] C:/Users/sam2004/git/app/develop/app-common/src/main/java/com/trial/app/ui/util/CacheConfig.kt:[53,64] Cannot access 'constructor(reflectionCacheSize: Int = ..., nullToEmptyCollection: Boolean = ..., nullToEmptyMap: Boolean = ..., nullIsSameAsDefault: Boolean = ..., singletonSupport: SingletonSupport = ..., strictNullChecks: Boolean = ..., useKotlinPropertyNameForGetter: Boolean = ..., useJavaDurationConversion: Boolean = ...): KotlinModule': it is private in 'com/fasterxml/jackson/module/kotlin/KotlinModule'.

有问题的依赖项是:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin -->
<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>2.18.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8 -->
<dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib-jdk8</artifactId>
    <version>2.0.21</version>
</dependency>

我可以看到来自 Jackson jar 的错误。

导致问题的代码行是:

private val mapper = ObjectMapper().apply { registerModule(KotlinModule()) }

这个问题有解决办法吗?或者我是否必须回退到旧版本,因为这可能会导致大量代码更改?

kotlin constructor jackson migration jackson-module-kotlin
1个回答
0
投票

根据文档,以下之一应该有效:

val mapper = jacksonObjectMapper()
val mapper = ObjectMapper().registerKotlinModule()
val mapper = jsonMapper {
  addModule(kotlinModule())
}

(注意小写

kotlinModule()

© www.soinside.com 2019 - 2024. All rights reserved.