当前位置: 代码迷 >> 综合 >> 【Jackson】@JsonAnyGetter 和 @JsonAnySetter
  详细解决方案

【Jackson】@JsonAnyGetter 和 @JsonAnySetter

热度:82   发布时间:2024-02-08 21:26:42.0

@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类其他属性的平级位置。