【发布时间】:2016-03-29 19:40:58
【问题描述】:
假设我调用第三方 API 以获取对象 Task,然后我得到以下 JSON 字符串作为回报:
{
"tasks": [
{
"id": 1,
"code": "CODE",
"description": "Dummy Task",
"withConfirmation": false,
"resource": {
"id": "abcdef12-fe14-57c4-acb5-1234e7456d62",
"group": "Doctor",
"firstname": "Toto",
"lastname": "Wallace",
},
{
"id": 2,
"code": "CODE",
"description": "Dummyyy Taaask",
"withConfirmation": false
}
]
}
在返回的 json 中,我们有一个 Task 可以与 Resource 连接。
在我们的系统中,任务如下:
@JsonAutoDetect
public class Task implements Serializable {
private Integer id;
private String code = "BASIC";
private String description;
private boolean withConfirmation = false;
/**
* CONSTRUCTOR
*/
public Task() {
}
public Integer getId() {
return id;
}
@JsonProperty
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
@JsonProperty
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@JsonProperty
public boolean isWithConfirmation() {
return withConfirmation;
}
public void setWithConfirmation(boolean withConfirmation) {
this.withConfirmation = withConfirmation;
}
public String toString() {...
}
}
资源看起来像这样:
public class Resource implements Serializable {
...
private String firstname;
private String lastname;
private MedicalGroup group; // id + name + description
private Set<Task> tasks = new HashSet<Task>(0);
...
// getters and setters and toString etc.
...
}
因此,除了字段名称之外,主要区别在于 Task 不包含任何 Resource,但关系方向相反,这意味着 Task em>Resource 可以容纳 n Task。
对于这种情况,序列化从第三方返回的 json 对象并将其转换/映射到我自己系统中的 pojo 的最佳方法是什么? 我目前正在阅读 Gson 文档以尝试它,但欢迎提出任何建议。 此代码必须易于重用,因为在多个项目中都需要它。
【问题讨论】:
-
我们是否在资源和任务之间有一个连接字段,或者我们需要自省 json 响应以确定哪个任务拥有哪个资源?
-
我们必须反省才能找到它
-
@Naruto 这是一个简单的例子。我的情况有点复杂,我认为需要更多的治疗......
-
你有关系
resource have many tasks,但你得到的json是task have resource,创建双向关系有什么问题?它会让你轻松。
标签: java json deserialization