我将获得一个表格为:
的Json文件{
"descriptions": {
"desc1": "someString",
"desc2": {"name":"someName", "val": 7.0}
}
}
我有POJO:
public class CustomClass {
Map<String, Object> descriptions;
public static class NameVal{
String name;
double val;
public NameVal(String name, double val){...}
}
}
我可以使用代码重新创建json文件:
CustomClass a = new CustomClass();
a.descriptions = new HashMap<String, Object>();
a.descriptions.put("desc1", "someString");
a.descriptions.put("desc2", new CustomClass.NameVal("someName", 7.0));
new ObjectMapper().writeValue(new File("testfile"), a);
但是,当我使用以下内容阅读对象时:
CustomClass fromFile = new ObjectMapper().readValue(new File("testfile"), CustomClass.class);
然后fromFile.descriptions.get(“desc2”)的类型为LinkedHashMap,而不是CustomClass.NameVal类型。
如何让Jackson正确解析CustomClass.NameVal描述符的类型(除了制作一些包装解析并在Jackson读取文件后显式转换LinkedHashMap的类)?
答案 0 :(得分:0)
试试这个。创建一个具有名称和值属性的类描述:
public class Description {
private String name;
private double val;
}
现在在CustomClass中执行此操作:
public class CustomClass {
List<Description> descriptions;
}
就是这样。记得创建getter和setter因为Jackson需要它。
答案 1 :(得分:0)
您可以尝试这样的事情:
public class DescriptionWrapper {
private Description descriptions;
public Description getDescriptions() {
return descriptions;
}
public void setDescriptions(Description descriptions) {
this.descriptions = descriptions;
}
}
public class Description {
private String desc1;
private NameValue desc2;
public String getDesc1() {
return desc1;
}
public void setDesc1(String desc1) {
this.desc1 = desc1;
}
public NameValue getDesc2() {
return desc2;
}
public void setDesc2(NameValue desc2) {
this.desc2 = desc2;
}
}
public class NameValue {
private String name;
private double val;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getVal() {
return val;
}
public void setVal(double val) {
this.val = val;
}
}