SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加“com.fasterxml.jackson.module: jackson-module-kotlin

Posted

技术标签:

【中文标题】SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加“com.fasterxml.jackson.module: jackson-module-kotlin”【英文标题】:SpringBoot 2.5.0 For Jackson Kotlin classes support please add "com.fasterxml.jackson.module: jackson-module-kotlin" to the classpath 【发布时间】:2021-08-10 06:40:53 【问题描述】:

SpringBoot 2.5.1 现已修复此问题

关于我收到的警告的小问题。

SpringBoot 2.5.0 发布后,我只是做了一个从 2.4.x 到 2.5.0 的版本升级,没有任何代码更改。

突然,在应用程序启动时,我得到了

kground-preinit] o.s.h.c.j.Jackson2ObjectMapperBuilder: For Jackson Kotlin classes support please add "com.fasterxml.jackson.module:jackson-module-kotlin" to the classpath

问题是,我的 Springboot 不是 Kotlin 应用,而是 Java 应用。

它没有 Kotlin。

此外,我什至没有做任何明确的 JSON 解析。

请问我该如何禁用,请解决此警告?

【问题讨论】:

确保您的依赖项中没有 org.jetbrains.kotlin:kotlin-stdliborg.jetbrains.kotlin:kotlin-reflect(在 maven/gradle 脚本中) 5.3.8 里程碑中添加了一个类似的问题。 github.com/spring-projects/spring-framework/issues/26962 感谢您发布此信息。 接受的答案应该是“在 Spring Boot 2.5.1 中已修复”,这样人们就不必为变通办法而烦恼,因为他们可以轻松解决根本原因。 【参考方案1】:

似乎有解决方案here。这个想法是为Jackson2ObjectMapperBuilderCustomizer 提供额外的配置。很糟糕,需要更改代码,但你有它。

【讨论】:

【参考方案2】:

当构建器通过简单的方式检查 kotlin-runtime 是否存在于类路径中时,就会发生这种情况:

if (KotlinDetector.isKotlinPresent())

所以你应该只从你的项目依赖树中删除 kotlin-runtime。例如,org.springframework.boot:spring-boot-starter-security 对 org.jetbrains.kotlin 具有传递依赖。 简单排除为:

exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'

享受吧。

【讨论】:

不确定该语法是什么,但如何在 pom.xml 中配置它? 这在 maven 中也很简单。依赖标签总是有排除一些传递依赖的机制:maven.apache.org/guides/introduction/… 是的,我暂时修好了,我还在***.com/a/67800687/144578添加了一个答案【参考方案3】:

编辑:只需升级到解决此问题的 Spring Boot 2.5.1。


下面的旧答案:

我现在设法通过向我的 spring-boot-starter-security 依赖项添加排除项来解决这个问题,该依赖项显然定义了这个 Kotlin 依赖项。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib-jdk8</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-stdlib</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.jetbrains.kotlin</groupId>
            <artifactId>kotlin-reflect</artifactId>
        </exclusion>
    </exclusions>
</dependency>

【讨论】:

以上是关于SpringBoot 2.5.0 对于 Jackson Kotlin 类的支持,请在类路径中添加“com.fasterxml.jackson.module: jackson-module-kotlin的主要内容,如果未能解决你的问题,请参考以下文章

Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/fasterxml/jacks

Spring Boot 2.5.0、Spring Cloud 2020.0.2 和 Hibernate 5.4.31 - H2 数据库多行插入失败

Spring Boot 2.5.0 和 InvalidDefinitionException:默认不支持 Java 8 日期/时间类型`java.time.Instant`

Spring Boot 2.5.0正式版发布,MateCloud微服务平台同步升级

Spring Boot 2.5.0正式版发布,MateCloud微服务平台同步升级

Spring Boot 2.6.1 正式发布,2.4.x Game Over,2.5.0 成最低支持版本。。