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

时间:2016-02-23 04:52:40

标签: java jackson wordpress-json-api

我正在尝试将我的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);

9 个答案:

答案 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文件。

  1. 杰克逊核

  2. 杰克逊数据绑定

  3. 杰克逊 - 注解

    确保在类路径中添加了所有这些版本相同的版本。在你的情况下,类路径中缺少 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可以解决该问题,因为它对我有用。