fastjson反序列问题

jacksnow 发布于 2014/11/28 16:33
阅读 4K+
收藏 0

最近在做个类似Ext.Direct 的jquery 插件,这个插件写好了,服务器段用java实现的时候遇到了一个fastjson 反系列化的问题,需要把需要请求的json 反序列化 DirectRequest  

主要几个字段 action(把请求映射的某个类) method(把请求映射的某个action类的某个方法) data (传递给方法的参数)如 {"action":"Echo","method":"getByDate","data":["2014-11-18 11:23:34"]}

如果方法有参数 请求json data 不是空 可以正常反序列化,但是 如果方法没有参 数,json data 为null  如 {"action":"Echo","method":"getByDate","data":null} 这样反序列时就会出错com.alibaba.fastjson.JSONException: syntax error, expect [, actual null, pos 6

是我使用fastjson 不对,还是fastjson 有bug

以下是问题补充:

@jacksnow:DirectRequest类 package entity; import com.alibaba.fastjson.JSONArray; public class DirectRequest { private String action; private String method; private JSONArray data; public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public JSONArray getData() { return data; } public void setData(JSONArray data) { this.data = data; } } ​测试类 package test; import com.alibaba.fastjson.JSON; import entity.DirectRequest; public class DirectRequestTest { public static void main(String[] args) { String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":null}"; DirectRequest req= JSON.parseObject(str,DirectRequest.class); } } 报错 ​ (2014/11/28 22:50)
加载中
0
优雅先生
优雅先生

DirectRequest类的第三个属性是JSONArray类型,所以异常提示“expect [”,改成:

String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":[]}";

就好了。


0
小小志
小小志
String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":null}";
TmpModel model = JSON.parseObject(str,TmpModel.class);

测试未发现楼主这样的问题,把反序列化的代码贴出来看看

0
jacksnow
jacksnow

DirectRequest类

package entity;
import com.alibaba.fastjson.JSONArray;


public class DirectRequest {
private String action;
private String method; 
private JSONArray data;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public JSONArray getData() {
return data;
}
public void setData(JSONArray data) {
this.data = data;
}
}


测试类

package test;


import com.alibaba.fastjson.JSON;


import entity.DirectRequest;


public class DirectRequestTest {
   public static void main(String[] args) {
  String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":null}"; 
  DirectRequest req= JSON.parseObject(str,DirectRequest.class);
  
}
}


报错

小小志
小小志
把data设置成List类型
0
jacksnow
jacksnow

引用来自“优雅先生”的评论

DirectRequest类的第三个属性是JSONArray类型,所以异常提示“expect [”,改成:

String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":[]}";

就好了。


你说的我知道,还可以json不要data 属性 String str = "{\"action\":\"Echo\",\"method\":\"getByDate\"}";  只不过jquery插件我是仿写Ext.Direct,它是没有参数 data:null 我觉得这样好理解些,写成 data:[] 让人觉得方法还是需要参数一样,我是希望 String str = "{\"action\":\"Echo\",\"method\":\"getByDate\",\"data\":null}";反序列化后DirectRequest 的data 属性为null

返回顶部
顶部