我有一個有趣的JSON解析問題,至少對我來說,因爲我是第一次這樣做。我有以下的樣品JSON,我想它映射到等價的DTO:將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類是類似的,即getter和setter對於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響應映射到我的DTO,因爲「模塊」是JSON中的數組,並且它本身也包含可變大小的數組。
謝謝。
(* Vipul)();
_明顯_並不意味着什麼。告訴我們它是如何失敗的,它拋出什麼異常以及你期望發生什麼。 –
您擁有的Json結構不會映射到您的DTO。它匹配ModuleDTO的Array。您可以使用單個屬性ArrayList模塊定義ModuleList類;然後將ModuleList.class傳遞給解析器 –
hellboy
3歡呼聲給你bellboy :-)我根據你的建議和賓果定義了以下類! ------ package com.sgsi.modulestructure.dto; import java.util.ArrayList; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) public class ModuleListDTO { \t private ArrayList modules; \t public ArrayList getModule(){ \t \t return this。模塊; \t} @JsonProperty( 「模塊」) \t公共無效setModule(ArrayList的模塊){ \t \t this.modules =模塊; \t} } 謝謝。 –
sgsi