@JsonAnySetter
可以将序列化时未识别到的属性都扔进一个map里。
@JsonAnyGetter
将map里的属性都平铺输出。
model类:
public class JsonModel1 {
private long id;
private String name;
private Map<String, Object> map;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@JsonAnySetter
public void addExtra(String key, Object value) {
if (map == null) {
map = new HashMap<>();
}
map.put(key, value);
}
@JsonAnyGetter
public Map<String, Object> getMap() {
return map;
}
test:
@Test
public void testDS1() throws IOException {
String json1 = "{\"name\":\"ly\",\"id\":1,\"address\":\"yuanping\"}";
JsonModel1 m2 = mapper.readValue(json1, JsonModel1.class);
System.out.println(m2.getMap());
String json = mapper.writeValueAsString(m2);
System.out.println(json);
}
输出:
{address=yuanping}
{"id":1,"name":"ly","address":"yuanping"}
可以看到,反序列化时未识别到的属性address被塞进了map属性了,另外在反序列时,也可以输出到model类其他属性的平级位置。