我需要编写一个遵循这种基本格式的JSON字符串:
"gesamtAngebot":{
"angebotList":[{
"instanzId":"string",
"buchungsKontextList":[{
"quellSystem":"SOMETHING",
"payload":{}
}],
"payload":{"test1":"test1"}
}]
}
我使用以下类来呈现数据,并使用Jackson ObjectMapper序列化此类的实例。
@Data
public class Angebot {
private String instanzId;
private List<BuchungsKontext> buchungsKontextList;
private Map<String, Object> payload = new HashMap<String, Object>();
@JsonAnyGetter
public Map<String, Object> any() {
return payload;
}
@JsonAnySetter
public void set(String name, Object value) {
payload.put(name, value);
}
}
如果我按原样序列化此类的实例,生成的JSON将是这样的:
"gesamtAngebot":{
"angebotList":[{
"instanzId":"string",
"buchungsKontextList":[{
"quellSystem":"SOMETHING",
"payload":{}
}],
"payload":{"test1":"test1"},
"test1":"test1"
}]
}
正如你所看到的那样,“有效载荷”的数据加倍,因为它是自己的元素,我不知道为什么。
提前感谢您的关注和建议。
答案 0 :(得分:0)
您似乎希望将payload
序列化为普通地图。因此,如果您不想要它两次,那么您不应该使用any()
方法,只需要payload
的常规getter方法。
如果您想要将any()
地图中的所有项目序列化为payload
类的属性,则可以使用Angebot
方法。然后,您将使用any
方法,而不是payload
的getter。
你的JSON会像这样出现:
"gesamtAngebot":{
"angebotList":[{
"instanzId":"string",
"buchungsKontextList":[{
"quellSystem":"SOMETHING",
"payload":{}
}],
"test1":"test1"
}]
}
看起来test1
是Angebot
类的变量。
答案 1 :(得分:0)
这是因为any()
吸气剂。只需删除它:
@Data
public class Angebot {
private String instanzId;
private List<BuchungsKontext> buchungsKontextList;
private Map<String, Object> payload = new HashMap<String, Object>();
// @JsonAnyGetter
// public Map<String, Object> any() {
// return payload;
// }
@JsonAnySetter
public void set(String name, Object value) {
payload.put(name, value);
}
}
payload
是类属性。由于@Data
注释,它会自然地反序列化。 any()
getter会造成双重性。