0

次の形式の 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") は CustomClass.NameVal 型ではなく LinkedHashMap 型になります。

Jackson に CustomClass.NameVal 記述子の型を適切に解析させるにはどうすればよいですか (解析をラップし、Jackson がファイルを読み取った後に LinkedHashMap を明示的に変換するクラスを作成する以外に)。

4

2 に答える 2

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;
    }
}    
于 2013-06-12T10:45:55.740 に答える