初めてこれを行うので、少なくとも私にとっては興味深い 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)() ;