4

初めてこれを行うので、少なくとも私にとっては興味深い JSON 解析の問題があります。次のサンプル JSON があり、それを同等の DTO にマップしたいと考えています。

{
    "modules":
    [
        {
            "name":"module1",
            "shortId":23425,
            "pmns":
            [
                {
                    "name":"pmn1",
                    "position":1,
                    "pmnType":"D3"
                },
                {
                    "name":"pmn3",
                    "position":3,
                    "pmnType":"R2"
                },
                {
                    "name":"pmn7",
                    "position":5,
                    "pmnType":"S1"
                },
            ]
        },
        {
            "name":"module2",
            "shortId":1572,
            "pmns":
            [
                {
                    "name":"pmn1",
                    "position":3,
                    "pmnType":"D3"
                },
                {
                    "name":"pmn12",
                    "position":35,
                    "pmnType":"R2"
                },
            ]
        }
    ]
}

これは私の ModuleDTO クラスです:

public class ModuleDTO {

    private String _name;
    private short _shortId;
    private PmnDTO[] _pmns;

    public String getName() {
        return _name;
    }

    public short getShortId() {
        return _shortId;
    }

    public PmnDTO[] getPmns() {
        return _pmns;
    }

    @JsonProperty("name")
    public void setName(String name) {
        this._name = name;
    }

    @JsonProperty("shortId")
    public void setShortId(short shortId) {
        this._shortId = shortId;
    }

    @JsonProperty("pmns")
    public void setPmns(PmnDTO[] pmns) {
        this._pmns = pmns;
    }

}

ここにはコピーされていませんが、私の PmnDTO クラスは似ています。つまり、JSON の pmn オブジェクトの各プロパティのゲッターとセッターです。

次のコードを書いて、DTO にマップしようとしました。私が使用しているライブラリは com.FasterXml.jackson (バージョン 2.3.1) です。

// Got the response, construct a DTOs out of it ...
ObjectMapper mapper = new ObjectMapper();
StringReader reader = new StringReader(response); // Json Response

// Convert the JSON response to appropriate DTO ...
ModuleDTO moduleDto = mapper.readValue(reader, ModuleDTO.class);

明らかに、このコードは機能しませんでした。「モジュール」がJSONの配列であり、それ自体に可変サイズの配列も含まれている場合、JSON応答をDTOにマップする方法を教えてください。

ありがとうございました。

(*Vipul)() ;

4

1 に答える 1