我正在尝试将我的json字符串转换为java对象而我收到错误
线程“main”中的异常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) at java.security.AccessController.doPrivileged(Native Method) 在java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ......还有4个
这是我的json字符串和我的代码片段
json string
{'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);
答案 0 :(得分:30)
如何将其添加到您的pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
答案 1 :(得分:17)
我有同样的错误消息。就我而言,杰克逊包含多个JAR文件。可悲的是,他们有不同版本的jackson-core和jackson-annotations导致了上述异常。
也许你没有在类路径中使用jackson-annotation JAR,至少在正确的版本中没有。您可以使用命令mvn dependency:tree
分析已使用的库版本。
答案 2 :(得分:16)
Jackson marshalling / unmarshalling需要以下相同版本的jar文件。
杰克逊核
杰克逊数据绑定
杰克逊 - 注解
确保在类路径中添加了所有这些版本相同的版本。在你的情况下,类路径中缺少 jackson-annotations 。
答案 3 :(得分:2)
即使这个答案为时已晚,我还是添加了它,因为我也经历了可怕的时间来寻找同一件事的答案。唯一不同的是,我在努力使用AWS Comprehend Medical API。
目前,我正在编写此答案,如果任何人在使用任何AWS开发工具包时遇到相同的问题,请将jackson-annotaions或任何jackson依赖项降级到2.8。*版本。 由于某些原因,最新的2.9。*版本无法与AWS SDK一起正常使用。任何人都有其背后的原因有任何想法,请在下面随意评论。
以防万一有人懒于google maven仓库,我已经链接了必要的仓库。签出来!
答案 4 :(得分:1)
获取所有3个杰克逊罐并将它们添加到您的构建路径中:
https://mvnrepository.com/artifact/com.fasterxml.jackson.core
答案 5 :(得分:0)
这是一个版本问题 更改版本&gt; 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>
答案 6 :(得分:0)
使用jackson-bom,它将具有所有三个jackson版本。即jackson-annotations,jackson-core和jackson-databind。这将解决与这些版本相关的依赖项
答案 7 :(得分:0)
我有不同版本的注释jar。将所有3个jar更改为使用 SAME版本的databind,批注和核心jackson jars
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.6</version>
</dependency>
答案 8 :(得分:-2)
使用Jackson-annotations.jar可以解决该问题,因为它对我有用。