【发布时间】:2014-05-16 00:08:03
【问题描述】:
我有一个有趣的 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 对象中每个属性的 getter 和 setter。
我编写了以下代码来尝试将其映射到 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 的数组。您可以使用单个属性 ArrayList
模块定义 ModuleList 类;然后将 ModuleList.class 传递给解析器 -
3 为你干杯 :-) 我根据你的建议和宾果游戏定义了以下课程! ------ 包 com.sgsi.modulestructure.dto;导入 java.util.ArrayList;导入 com.fasterxml.jackson.annotation.JsonIgnoreProperties;导入 com.fasterxml.jackson.annotation.JsonProperty; @JsonIgnoreProperties(ignoreUnknown = true) public class ModuleListDTO { private ArrayList
modules; public ArrayList getModule() { return this.modules; } @JsonProperty("modules") public void setModule(ArrayList modules) { this.modules = modules; } } 谢谢。
标签: java json jackson dto toarray