我需要将 json 转换为 POJO,我决定为此使用 JACKSON 库,我已将 jackson-databind-2.2.3.jar 和 jackson-core-2.0.6.jar 添加到我的路径中,然后创建了以下类:
1- 数据绑定类:
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
我是杰克逊图书馆的新手,我不知道为什么会出现这个错误。
在此先感谢您的帮助。
添加注释罐后,我面临以下错误:
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)
事实上,数据集表返回 null,知道为什么数据集不包含 json 名称字段吗?