开发者社区> 问答> 正文

fastjson反序列问题 400 请求报错 

最近在做个类似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

展开
收起
kun坤 2020-05-30 16:22:38 851 0
1 条回答
写回答
取消 提交回答
  • DirectRequest类的第三个属性是JSONArray类型,所以异常提示“expect [”,改成:
    String str = "{"action":"Echo","method":"getByDate","data":[]}";
    就好了。

    ######

    String str = "{"action":"Echo","method":"getByDate","data":null}"; TmpModel model = JSON.parseObject(str,TmpModel.class);
    测试未发现楼主这样的问题,把反序列化的代码贴出来看看 ######
    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类型######

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

    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
    2020-05-30 16:22:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载