NoMethodFoundException -Jacksonyaml解析器和snakeYAML

r6vfmomb  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(119)

我得到以下异常时,试图转换一个yaml字符串到一个类

java.lang.NoSuchMethodError: 'void org.yaml.snakeyaml.parser.ParserImpl.<init>(org.yaml.snakeyaml.reader.StreamReader, org.yaml.snakeyaml.LoaderOptions)'
    at com.fasterxml.jackson.dataformat.yaml.YAMLParser.<init>(YAMLParser.java:204)

执行此代码时:

try {
     MyClass claseIns = mapper.readValue(string, MyClass.class);
         MyClass.add(claseIns);
         } catch (JsonProcessingException e) {
             e.printStackTrace();
    }

Sping Boot 版本2.7.13
build.gradle包括:

buildscript {
    dependencies {
        classpath 'org.yaml:snakeyaml:2.0'
    }
}

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
}

从网上搜索来看,这似乎是Jackson和snakeYAML之间的版本问题,但正如你在这里看到的,jackson 2.15.2与snakeYAML 2.0兼容:https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.15.2

fivyi3re

fivyi3re1#

问题可能来自jackson-dataformat-yaml(2.15.2)版本和相关的snakeyaml版本之间的不匹配。如果您使用的是不同的snakeyaml版本,它可能缺少jackson-dataformat-yaml所需的某些方法,从而导致NoSuchMethodError

如何:解决此问题

1.通过允许jackson-dataformat-yaml拉取版本来同步版本,而不是硬编码。

验证码:

dependencies {
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
    // Do not specify snakeyaml version here, let jackson-dataformat-yaml pull the appropriate version
  }

如果您有冲突的依赖项,您可以使用gradle中的exclude功能。刷新Gradle后,检查依赖项并找到snakeyaml,看看版本是否匹配。

相关问题