首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
FastJson 反序列化问题 绝对是个bug吧
或是的话
2018-03-06 11:43
如图 该json 无法被 jfinal 生成的model解析
项目:
JFinal
评论区
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包 重新编译 最终测试成功
回复
发送
我要反馈
热门反馈
扫码入社