我正在尝试将 json 字符串转换为 java 对象,但出现错误
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonInclude$Value
at com.fasterxml.jackson.databind.cfg.MapperConfig.<clinit>(MapperConfig.java:45)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:535)
at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:452)
at com.allianz.cmis.util.ApacheHttpClientGet.main(ApacheHttpClientGet.java:65)
Caused by: 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)
at java.security.AccessController.doPrivileged(Native Method)
at 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 more
这是我的 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);`
将其添加到您的 pom.xml 中如何
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
Jackson 编组/解组需要以下相同版本的 jar 文件。
杰克逊核心
杰克逊数据绑定
杰克逊注释
确保您已在类路径中添加了相同版本的所有这些。在您的情况下,类路径中缺少jackson-annotations。
我有同样的错误消息。就我而言,Jackson 由多个 JAR 文件组成。遗憾的是,他们有不同版本的 jackson-core 和 jackson-annotations,导致了上述异常。
也许您的类路径中没有 jackson-annotation JAR,至少没有正确的版本。您可以使用命令
mvn dependency:tree
来分析所使用的库版本。
我有不同版本的注释 jar。更改了所有 3 个 jar,以使用数据绑定、注释和核心 jackson jar 的相同版本
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.8.6</version>
</dependency>
目前我正在写这个答案,如果有人在任何 AWS SDK 中遇到相同的问题,请
将 jackson-annotaions 或任何 jackson 依赖项降级到 2.8.* 版本。 由于某种原因,最新的 2.9.* 版本无法与 AWS SDK 正常工作。如果有人知道这背后的原因,请随时在下面发表评论。
以防万一有人懒得去 google maven 存储库,我已经链接了必要的存储库。检查一下!
所有依赖项必须具有相同版本。
以下是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>
<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>
jackson
相关 jar,这有助于将
JSON
转换为
POJO
和
POJO
到
JSON
响应。 (
jackson-core
,
jackson-annotations
,
jackson-databind
)。让我们假设您已经添加了这些 Jar,但您仍然面临这个问题,这里是一些故障排除步骤
故障排除步骤:
mvn dependecy:tree
如果您发现任何冲突的 jackson jar 尝试排除它们,如下所示
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</exclusion>
</<exclusions>
cd (.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.2.2)
jar -xvf
这个命令会爆炸jar并生成所有相应的类
mvn clean install
)