FastJson 反序列化问题 绝对是个bug吧

image.png如图 该json 无法被 jfinal 生成的model解析

评论区

JFinal

2018-03-06 11:46

猜测你是用的 fastjson 进行的 json 反序列化, fastjson 依赖 model/bean 中的 setter 方法来做反序列化,所以关注下 setter 方法是否存在,以及是否正确

或是的话

2018-03-06 11:52

@JFinal setter都是 jfinal自动生成的public M setId(Long id) {
set("id", id);
return (M)this;
}

public Long getId() {
return getLong("id");
}

public M setOrderType(String orderType) {
set("orderType", orderType);
return (M)this;
}

public String getOrderType() {
return getStr("orderType");
}

public M setOrderStatus(String orderStatus) {
set("orderStatus", orderStatus);
return (M)this;
}

public String getOrderStatus() {
return getStr("orderStatus");
}

public M setOrderNo(String orderNo) {
set("orderNo", orderNo);
return (M)this;
}

public String getOrderNo() {
return getStr("orderNo");
}

public M setSupplierId(Long supplierId) {
set("supplierId", supplierId);
return (M)this;
}

public Long getSupplierId() {
return getLong("supplierId");
}

public M setWarehouseId(Long warehouseId) {
set("warehouseId", warehouseId);
return (M)this;
}

public Long getWarehouseId() {
return getLong("warehouseId");
}

public M setTotalOrderQty(java.math.BigDecimal totalOrderQty) {
set("totalOrderQty", totalOrderQty);
return (M)this;
}

public java.math.BigDecimal getTotalOrderQty() {
return get("totalOrderQty");
}

public M setTypeQty(java.math.BigDecimal typeQty) {
set("typeQty", typeQty);
return (M)this;
}

public java.math.BigDecimal getTypeQty() {
return get("typeQty");
}

public M setOtherPrice(java.math.BigDecimal otherPrice) {
set("otherPrice", otherPrice);
return (M)this;
}

public java.math.BigDecimal getOtherPrice() {
return get("otherPrice");
}

public M setTotalPrice(java.math.BigDecimal totalPrice) {
set("totalPrice", totalPrice);
return (M)this;
}

public java.math.BigDecimal getTotalPrice() {
return get("totalPrice");
}

public M setCurrencyType(String currencyType) {
set("currencyType", currencyType);
return (M)this;
}

public String getCurrencyType() {
return getStr("currencyType");
}

public M setExpectDate(String expectDate) {
set("expectDate", expectDate);
return (M)this;
}

public String getExpectDate() {
return getStr("expectDate");
}

public M setArriveDate(String arriveDate) {
set("arriveDate", arriveDate);
return (M)this;
}

public String getArriveDate() {
return getStr("arriveDate");
}

public M setCheckName(String checkName) {
set("checkName", checkName);
return (M)this;
}

public String getCheckName() {
return getStr("checkName");
}

public M setCheckTime(java.util.Date checkTime) {
set("checkTime", checkTime);
return (M)this;
}

public java.util.Date getCheckTime() {
return get("checkTime");
}

public M setMemo(String memo) {
set("memo", memo);
return (M)this;
}

public String getMemo() {
return getStr("memo");
}

public M setUpdateCount(Integer updateCount) {
set("updateCount", updateCount);
return (M)this;
}

public Integer getUpdateCount() {
return getInt("updateCount");
}

public M setCreateAuthor(String createAuthor) {
set("createAuthor", createAuthor);
return (M)this;
}

public String getCreateAuthor() {
return getStr("createAuthor");
}

public M setCreateTime(java.util.Date createTime) {
set("createTime", createTime);
return (M)this;
}

public java.util.Date getCreateTime() {
return get("createTime");
}

public M setUpdateAuthor(String updateAuthor) {
set("updateAuthor", updateAuthor);
return (M)this;
}

public String getUpdateAuthor() {
return getStr("updateAuthor");
}

public M setUpdateTime(java.util.Date updateTime) {
set("updateTime", updateTime);
return (M)this;
}

public java.util.Date getUpdateTime() {
return get("updateTime");
}

public M setUpdatePage(String updatePage) {
set("updatePage", updatePage);
return (M)this;
}

public String getUpdatePage() {
return getStr("updatePage");
}

JFinal

2018-03-06 11:57

@或是的话 在没有正常反序列化的 setter 方法中设置一个断点,看 fastjson 程序是否进入过相应的 setter 方法

或是的话

2018-03-06 11:58

@JFinal 没有,调试了

或是的话

2018-03-06 11:58

@JFinal 没有进入setter

JFinal

2018-03-06 12:03

@或是的话 接下来就是排查 setter 方法的正确性了,例如大小写问题,与 json 数据是否可以协同工作

或是的话

2018-03-06 12:50

@JFinal setter的问题?如何排查?修改jfinal生成的model?

JFinal

2018-03-06 13:14

@或是的话 只排查无法正常转化的那个 json 数据,定位是哪一部分无法转换

JFinal

2018-03-06 13:15

@或是的话 setter 方法没发现有问题

或是的话

2018-03-06 14:11

@JFinal 你是说 你测试完之后 setter没问题是吧 是不是fastjson版本问题?

或是的话

2018-03-06 14:12

@JFinal 都是无法正常转换的 不是个别情况

JFinal

2018-03-06 14:34

@或是的话 我看了你前面回复中给出的 setter 方法,未发现问题,因此推断是 json 字符串的问题

tosur

2018-03-06 15:38

这样的问题也甩锅,唉,自己写个实体类反一下不就知道了

或是的话

2018-03-06 17:38

@tosur 用你的脑子想一想 正常的类如果还反不了 那他妈就是FastJson是个垃圾了

或是的话

2018-03-06 17:49

@tosur 我而且也是过了 正常实体类是没问题的

或是的话

2018-03-06 18:02

@JFinal 我json是这样 应该谁没啥问题:

{"supplierId":"1","warehouseId":"1","currencyType":"CN","expectDate":"","memo":"","productTotalPrice":"168.00","otherPrice":"0.00","totalPrice":"168.00"}

JFinal

2018-03-06 18:07

@或是的话 是哪一个数据没有转换,还是说所有数据都没有转换成功,逐步定位

此外,转换的时候是否抛出了异常,如果有异常,可以根据异常分析解决

解决问题是一个递进的过程,你那里掌握着最全面的信息,最适合逐步推进去解决,我们回复只能凭你提供的仅有的信息量去帮你猜测

或是的话

2018-03-06 18:19

@JFinal 所有数据都无法转换 没抛出异常 你可以亲自测一测

JFinal

2018-03-06 18:42

@或是的话 在俱乐部群里面将 json string 发给我,然后将这个 model 代码也发给我, 我测试一下

或是的话

2018-03-06 18:53

@JFinal 已经发了 波总

或是的话

2018-03-07 00:09

@JFinal 最终解决办法是把fastjson 包升级成最新版本 并移除原来所有低版本的fastjson包 重新编译 最终测试成功

南兄

2020-07-13 16:57

我也碰到这个问题,无法解决

或是的话

2020-07-14 15:36

@南兄 最终解决办法是把fastjson 包升级成最新版本 并移除原来所有低版本的fastjson包 重新编译 最终测试成功

热门反馈

扫码入社