java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonInclude$Value

Posted

技术标签:

【中文标题】java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonInclude$Value【英文标题】: 【发布时间】:2016-06-04 18:59:37 【问题描述】:

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

线程“主”java.lang.NoClassDefFoundError 中的异常:com/fasterxml/jackson/annotation/JsonInclude$Value 在 com.fasterxml.jackson.databind.cfg.MapperConfig.(MapperConfig.java:45) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:535) 在 com.fasterxml.jackson.databind.ObjectMapper.(ObjectMapper.java:452) 在 com.allianz.cmis.util.ApacheHttpClientGet.main(ApacheHttpClientGet.java:65) 引起:java.lang.ClassNotFoundException:com.fasterxml.jackson.annotation.JsonInclude$Value 在 java.net.URLClassLoader$1.run(URLClassLoader.java:366) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:355) 在 java.security.AccessController.doPrivileged(本机方法) 在 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 字符串和我的代码 sn-p

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);

【问题讨论】:

【参考方案1】:

如何将其添加到您的 pom.xml 中

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

【讨论】:

pom.xml应该放在哪里? @BakedInhalf 应该在你的源码根目录下 相关问题 - ***.com/questions/52023961/… 我使用了 2.12.0 并且成功了 :) 非常感谢@MonoThreaded【参考方案2】:

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

    杰克逊核心

    杰克逊数据绑定

    杰克逊注解

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

【讨论】:

相关问题 - ***.com/questions/52023961/… 除了相同的版本之外,依赖关系应该被定义为一个可以得到不同版本的临时依赖关系。【参考方案3】:

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

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

【讨论】:

JAX-RS 和 jsonschema2pojo,例如具有不同的 jackson 版本作为依赖项(在 maven 中)。强制一个特定版本(在依赖管理中)解决了这个问题。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

即使这个答案为时已晚,我还是添加了它,因为我也经历了一段可怕的时间来寻找同一问题的答案。唯一不同的是,我一直在努力使用 AWS Comprehend Medical API。

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

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

Jackson-Core Repo Jackson-Core-Databind - 2.8.11.3 Jackson-Core - 2.8.6 Jackson Annotations - 2.8.11

【讨论】:

现在,您可以使用新的 2.10.0 版本,而不是降级,它已为我修复。 你先生是我今天的英雄。 非常感谢。在将 Spring Boot 版本从 2.1 升级到 2.4 后,我的项目中遇到了类似的问题,使用这里建议的 v2.10.0 解决了我的问题。【参考方案6】:

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

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

【讨论】:

如何添加到构建路径?在智能中【参考方案7】:

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

【讨论】:

【参考方案8】:

这是版本问题 将版本> 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>  

【讨论】:

【参考方案9】:

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

【讨论】:

您能否详细说明您的答案

以上是关于java.lang.ClassNotFoundException: com.fasterxml.jackson.annotation.JsonInclude$Value的主要内容,如果未能解决你的问题,请参考以下文章