我有一个包含2个Java实体(Lets Say E1,E2)的Web项目,就像mybatis和VO一样。
对象结构:
class E1{
String a;
.... n other data members
E2 e2;
}
class E2{
String b;
.... n other data members
}
是否可以在Android项目中创建一个类,即
class E1 {
String a;
String b; //This Data member belongs to class E2
}
并在框架(如杰克逊)的帮助下解析它,或者我必须为此编写一个自定义类?
我的JSON数据将如下所示:
{
"E1": {
"a": "some data",
.
.
.
"E2": {
"b": "some data",
.
.
other data
}
}
}
有没有API可以做到这一点? 我问这个是因为我的网络应用程序不仅仅是2个类,而是至少10个互连的类,我不是在我的Android应用程序中使用它们。因此,不要在Android应用程序中复制相同的类。
此外,如果您可以提出任何其他可能的建议方式。
答案 0 :(得分:0)
这将是一个非常糟糕的设计实践/方法,使得调试非常困难,容易出错并且不会出现未来证明(考虑一下,如果你添加到10个类中的一个,那该怎么办?与另一个类'字段冲突的字段?)。
无论如何,如果你仍然想要使用正确的方法,那就是有10个类,我不知道有任何lib提供这个功能。你可以解析json ==> 10 Java Map
,然后通过Map
方法合并10 Map::putAll
,最后将包含所有对象的获取Map
传递给Jackson。
答案 1 :(得分:0)
您最好的选择是在接收器POJO上使用Jackson库中的@JsonAnySetter注释。
public class E1{
public String a;
private Map<String, Object> paramMap = new HashMap<>();
@JsonAnyGetter
public Map<String, Object> getParamMap() {
return paramMap;
}
@JsonAnySetter
public void setParamMap(String s, Object o) {
paramMap.put(s, o);
}
}
这会将每个未实现的属性放在HashMap中。
与@JsonAnyGetter结合使用,接收器POJO的序列化将提供与JSON输入相同的结果。