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的主要内容,如果未能解决你的问题,请参考以下文章