[alibaba/fastjson]fastjson升级到1.2.58后的巨坑VO中的_id自动将值映射到id属性中去了

2024-08-30 817 views
5

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

回答

3

请提供一下VO的类结构

3

如: 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;
}

}

9

fast rubish

1

看起来更像是把 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}
0

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