fastjson升级到1.2.58后的巨坑VO中的_id自动将值Map到id属性中去了

kr98yfug  于 2021-11-27  发布在  Java
关注(0)|答案(5)|浏览(239)

之前旧版的fastjson升级到最新的1.2.58后VO中的_id字段和id字段是我们业务的两个不同字段,现fastjson默认逻辑会将_id赋值Map给了id字段,导致一堆缺陷,fastjson开发人员请尽快将此问题处理下,市面那么多json框架jackson、gson都没有这种逻辑,为啥fastjson搞这种奇怪的逻辑。

n7taea2i

n7taea2i1#

请提供一下VO的类结构

jjhzyzn0

jjhzyzn02#

如: String str = "{id:"aa",_id:"bbb"}"; PersonVO p = JSON.parseObject(str,PersonVO.class); System.out.println(p.getId()); 打印出的结果是"bbb"而不是"aa",我怀疑是你们的智能匹配功能导致的,设置了禁用智能匹配功能也没效果! public class PersonVO { private String id; private String _id; public String getId() { return id; } public void setId(String id) { this.id = id; } public String get_id() { return _id; } public void set_id(String _id) { this._id = _id; } }…

------------------ 原始邮件 ------------------ 发件人: "温绍锦"notifications@github.com; 发送时间: 2019年6月25日(星期二) 晚上8:59 收件人: "alibaba/fastjson"fastjson@noreply.github.com; 抄送: "「Spring」。"519113110@qq.com;"Author"author@noreply.github.com; 主题: Re: [alibaba/fastjson] fastjson升级到1.2.58后的巨坑VO中的_id自动将值Map到id属性中去了 (#2507) 请提供一下VO的类结构 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

nx7onnlm

nx7onnlm4#

看起来更像是把 id 和 _id 认成了同一个属性。

VO vo = JSON.parseObject("{_id:2, id:1}", VO.class);
logger.info("vo={}", vo.toString()); // vo=VO{id=0, _id=2}

VO vo2 = JSON.parseObject("{id:2, _id:1}", VO.class);
logger.info("vo2={}", vo2.toString()); // vo=VO{id=0, _id=2}
4dbbbstv

4dbbbstv5#

遇到同样的问题。
fastjson解析 _id的时候 需要在属性的setter和getter方法上使用注解@JSONField(name="_id"),为其指定要序列化和反序列化后的属性名,否则就是泪

相关问题