java - 线程 "main"java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonAutoDetect Error when trying to convert json to POJO 中的异常

标签 java json jackson

我需要将 json 转换为 POJO,为此我决定使用 JACKSON 库,我已将 jackson-databind-2.2.3.jar 和 jackson-core-2.0.6.jar 添加到我的路径然后创建了以下类:

1- 数据绑定(bind)类:

package Distributed;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class DataBinding {

 public static void main(String[] args) throws JsonParseException, JsonMappingException, MalformedURLException, IOException {
        String url = "http://frstmwarwebsrv.orsyptst.com:9000/duobject?searchString=TSK(ZTA010OU05)(000)&filtercheck=nameSWF&p.index=0&p.size=8";
        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        DuObject duobject = mapper.readValue(new URL(url), DuObject.class);
        Dataset[] datasets = duobject.getDataset();
        for (Dataset dataset : datasets) {
            System.out.println(dataset.getName());
        }
    }

 }

2- 数据集类:

package Distributed;

import java.util.HashMap;
import java.util.Map;



public class Dataset {

private String id, name;
private Map<String , Object> otherProperties = new HashMap<String , Object>();



public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public Object get(String name) {
    return otherProperties.get(name);
}

}

3- DuObject 类:

package Distributed;

public class DuObject {

private String name;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Dataset[] getDataset() {
    return dataset;
}
public void setDataset(Dataset[] dataset) {
    this.dataset = dataset;
}
private Dataset[] dataset;

}

这是我在启动使用的 URL 时的 json 对象:

 {
"facets": {
"application": [
  {
    "name": "u_",
    "distribution": 2
  }
],
"node": [
  {
    "name": "frstlwardu03_05",
    "distribution": 2
  }
],
"area": [
  {
    "name": "x",
    "distribution": 2
  }
],
"company": [
  {
    "name": "war001",
    "distribution": 2
  }
]
 },
"duObjects": [
{
  "id": "TASK|TSK(ZTA010OU05)(000)|ZECPFICO00",
  "name": "TSK(ZTA010OU05)(000)",
  "mu": "ZECPFICO00",
  "label": "",
  "uprocHeader": "ZTA010OU05|000",
  "uprocHeaderLabel": "Uproc Tech Planif ne pas supprimer tous les jours f\u00c3\u00a9ri\u00c3\u00a9s",
  "uprocHeaderType": "CL_INT",
  "domain": "I",
  "domainLabel": "Internal Activities",
  "application": "U_",
  "applicationLabel": "DU",
  "highlightResult": {
    "name": "name",
    "word": "TSK"
  }
},
{
  "id": "TASK|TSK(ZTA010OU05)(000)|ZECPSDA000",
  "name": "TSK(ZTA010OU05)(000)",
  "mu": "ZECPSDA000",
  "label": "",
  "uprocHeader": "ZTA010OU05|000",
  "uprocHeaderLabel": "Uproc Tech Planif ne pas supprimer tous les jours f\u00c3\u00a9ri\u00c3\u00a9s",
  "uprocHeaderType": "CL_INT",
  "domain": "I",
  "domainLabel": "Internal Activities",
  "application": "U_",
  "applicationLabel": "DU",
  "highlightResult": {
    "name": "name",
    "word": "TSK"
  }
}
],
"totalCount": 2,
"pageSize": 10,
"pageCurrent": 1,
"pageNb": 1
}

我要做的是获取 DuObject.name 并将其存储在 DataSet 表中;但是,当我运行 Databinding 类时,出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError:     com/fasterxml/jackson/annotation/JsonAutoDetect
at com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std.<clinit>  (VisibilityChecker.java:172)
at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:193)
at Distributed.DataBinding.main(DataBinding.java:16)
  Caused by: java.lang.ClassNotFoundException:   com.fasterxml.jackson.annotation.JsonAutoDetect
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 3 more

我是 jackson livbrary 的新手,我不知道为什么会出现此错误。

提前感谢您的帮助。

添加注释 jar 后,我遇到以下错误:

Exception in thread "main" java.lang.NoSuchMethodError:      com.fasterxml.jackson.core.JsonFactory.createParser(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser;
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2011)
at Distributed.DataBinding.main(DataBinding.java:18)

我已将三个 JARS 更改为 2.1.2 版本,我现在得到的错误是:

    Exception in thread "main" java.lang.NullPointerException
at Distributed.DataBinding.main(DataBinding.java:21)

事实上,Dataset 表返回 null,知道为什么数据集不包含 json 名称字段吗?

最佳答案

你必须添加一个 jar :jackson-annotations-2.1.2.jar

您可以从 here 下载它

编辑:

此外,由于您的 json 中有数组,因此需要对其进行遍历:

    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    JsonNode node = mapper.readTree(new URL(url));
    node = node.get("duObjects");

    TypeReference<List<Dataset>> typeRef = new TypeReference<List<Dataset>>() {
    };
    List<Dataset> list = mapper.readValue(node.traverse(), typeRef);
    for (int i = 0; i < list.size(); i++) {
        Dataset dataSet = list.get(i);
        System.out.println(dataSet.getName());
    }

关于java - 线程 "main"java.lang.NoClassDefFoundError : com/fasterxml/jackson/annotation/JsonAutoDetect Error when trying to convert json to POJO 中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856363/

相关文章:

java - JSONGenerator 如何输出 JSON 中的对象

json - 为什么我在 Angular 2 项目中需要 `typings.json` 文件?

java - 使用构建器模式编码解码不可变对象(immutable对象)的最佳方法

java - 如何在Android中使用Jackson解析器处理json数组解析

java - 如何使用JMS Appender?

java - 检测我的应用程序是否在 Azure 中运行

Java 删除 -> 编译时类型对齐 - 或 Java 库/框架代码转换为应用程序逻辑

python - 如何检查 JSON 格式验证?

json - 如何在 REST 中创建 POST 请求以接受 JSON 输入?

引用另一个枚举的 Java 枚举