我有一个带有Map
的Sample pojoclass Sample {
private Integer id;
private String name;
private Map<String,Object> map;
public Map<String,Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
当我使用Jackson将此POJO写为JSON时,我得到以下结果。
{
"id" : 1234,
"name" : "abc",
"map" : {
"key1" : {
"field" : "value",
"field1" : "value"
},
"key2" : [
{
"something" : "a",
"somethingElse" : 1
},
{
"something" : "b",
"somethingElse" : 2
}
]
}
}
虽然我想把这张地图写成
{
"id" : 1234,
"name" : "abc",
"key1" : {
"field" : "value",
"field1" : "value"
},
"key2" : [
{
"something" : "a",
"somethingElse" : 1
},
{
"something" : "b",
"somethingElse" : 2
}
]
}
有没有办法在没有使用自定义序列化器的情况下使用?
答案 0 :(得分:2)
如果您可以使用杰克逊,那么以下代码可以帮助您:
class Sample {
private Map<String,Object> map = new HashMap<>();
@JsonAnyGetter
public Map<String,Object> getMap() {
return this.map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
@JsonAnySetter
public void addValue(String key, Object value) {
this.map.put(key, value);
}
}
在这种情况下,对于所有未知字段,这将按其键存储(或获取)值。