@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;}@JsonAnySetterpublic void addExtra(String key, Object value) {if (map == null) {map = new HashMap<>();}map.put(key, value);}@JsonAnyGetterpublic Map<String, Object> getMap() {return map;}
test:
@Testpublic 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类其他属性的平级位置。