fastjson反序列化带有get没有set的list字段,没有值反序列化带有get⽅法的list字段
但是对于对象中带有get⽅法的list字段,fastjson的处理:
通过get⽅法获取list或map,如果是null不会处理。
以下带来。com.alibaba.fastjson.parser.deserializer.FieldDeserializer类 setValue⽅法⽚段。
1 2 3 4
5 6 7 8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23else if (Map.class.ReturnType())) { Map map = (Map) method.invoke(object); if (map != null) { if (map == ptyMap() || Class().getName().startsWith("java.util.Collections$Unmodifiable")) { // skip return; }
map.putAll((Map) value); } } else { Collection collection = (Collection) method.invoke(object); if (collection != null && value != null) { if (collection == ptySet() || collection == ptyList() ||
collection.addAll((Collection) value); } }
所以以下例⼦反序列化出来的ids属性为null。
1 2 3 4 5 6 7 8 9 10 11 12 13public class Test { private int id; private List<Integer> ids; public int getId() { return id; } public List<Integer> getIds() { return ids; } }
1 2 3 4 5 6 7 8String msg="[" + "{" + "\"id\":1," + "\"ids\":[1,2]" + "}" + "]"; Test obj = JSON.parseObject(msg, new TypeReference<Test>() { }.getType(), Feature.SupportNonPublicField);
解决⽅法
//ParserConfig 添加true参数,开启只基于字段进⾏反序列化。
fastjson忽略属性
1 2JSON.parseObject(msg,ew TypeReference<Test>() { }.getType(), new ParserConfig(true));
设置了fieldBased,反序列化处理来ids就有值了
详细:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。