68

我正在尝试将我的 json 字符串转换为 java 对象,但出现错误

线程“主”java.lang.NoClassDefFoundError 中的异常:com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:45) 的 com.fasterxml.jackson 的 com/fasterxml/jackson/annotation/JsonInclude$Value。 databind.ObjectMapper.(ObjectMapper.java:535) at com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:452) at com.allianz.cmis.util.ApacheHttpClientGet.main(ApacheHttpClientGet.java:65) : java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonInclude$Value at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355)在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:354) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:425) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 还有 4 个

这是我的 json 字符串和我的代码片段

json字符串 {'ctpnsw': [{'abc' , 'def' }]}

模型

public class Fields {

     private List<String> ctpnsw;

    public List<String> getCtpnsw() {
        return ctpnsw;
    }

    public void setCtpnsw(List<String> ctpnsw) {
        this.ctpnsw = ctpnsw;
    }

}

Java 代码

ObjectMapper mapper = new ObjectMapper(); List<Fields> list = mapper.readValue(output, TypeFactory.defaultInstance().constructCollectionType(List.class,Fields.class)); System.out.println(list);

4

10 回答 10

67

如何将它添加到您的 pom.xml

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>${jackson.version}</version>
</dependency>
于 2016-06-12T20:21:16.043 回答
54

Jackson 编组/解组需要以下相同版本的 jar 文件。

  1. 杰克逊核心

  2. 杰克逊数据绑定

  3. 杰克逊注解

    确保您在类路径中添加了所有这些具有相同版本的内容。在您的情况下,类路径中缺少jackson-annotations 。

于 2017-09-25T13:08:19.693 回答
28

我有同样的错误信息。在我的例子中,Jackson 由多个 JAR 文件组成。可悲的是,他们有不同版本的 jackson-core 和 jackson-annotations 导致上述异常。

也许您的类路径中没有jackson-annotation JAR,至少在正确的版本中没有。您可以使用命令分析使用的库版本mvn dependency:tree

于 2016-04-20T15:42:23.137 回答
16

我有不同版本的注释 jar。将所有 3 个 jar 更改为使用相同版本的数据绑定、注释和核心 jackson jar

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.8.6</version>
</dependency>
于 2019-10-31T04:30:35.190 回答
14

尽管这个答案为时已晚,但我还是添加了它,因为我也经历了一段可怕的时间来寻找同一问题的答案。唯一不同的是,我在 AWS Comprehend Medical API 上苦苦挣扎。

在我写这个答案的那一刻,如果有人在任何 AWS 开发工具包中遇到同样的问题,请将jackson-annotaions 或任何 jackson 依赖项降级到 2.8.* 版本。 由于某种原因,最新的 2.9.* 版本无法与 AWS 开发工具包一起正常工作。任何人对背后的原因有任何想法,请随时在下面发表评论。

以防万一有人懒得谷歌 maven repos,我已经链接了必要的 repos。检查出来!

于 2019-05-29T02:27:20.423 回答
3

获取所有 3 个 jackson jar 并将它们添加到您的构建路径中:

https://mvnrepository.com/artifact/com.fasterxml.jackson.core

于 2017-10-19T12:37:11.353 回答
3

使用 jackson-bom,它将拥有所有三个 jackson 版本。iejackson-annotations、jackson-core 和 jackson-databind。这将解决与这些版本相关的依赖关系

于 2019-05-13T10:17:12.307 回答
0

这是版本问题将版本> 2.4 到1.9 解决它

<dependency>  
<groupId>com.fasterxml.jackson.jaxrs</groupId>  
<artifactId>jackson-jaxrs-xml-provider</artifactId>  
<version>2.4.1</version>  

<dependency>  
<groupId>org.codehaus.jackson</groupId>  
<artifactId>jackson-mapper-asl</artifactId>  
<version>1.9.4</version>  

于 2018-05-16T05:01:07.360 回答
0

我也遇到了类似的问题,通过参考上述解决方案,我能够解决问题。

所有依赖项必须具有相同的版本

以下是 pom.xml 文件中添加的依赖项

<dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.8.7</version>
</dependency>


 <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.8.7</version>
 </dependency>


 <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.7</version>
  </dependency>
于 2022-02-23T06:28:50.617 回答
-3

使用 Jackson-annotations.jar 将解决问题,因为它对我有用。

于 2020-01-26T10:25:06.803 回答