zoukankan      html  css  js  c++  java
  • JSONObject反序列化失败:com.alibaba.fastjson.JSONException: syntax error, expect...

    背景

    使用之前的项目中有一段代码拷贝到现有系统中,无法兼容,同样的代码解析出现问题,代码如下:

    public void cacheCybertronSupperAdmin(SysUser sysUser) {
            redisTemplate.opsForValue().set(Constants.ACCESS_TOKEN_CACHE_NAME + ":" + cybertronToken, JSONObject.toJSONString(sysUser));
        }
    
    public SysUser getSysUser(String token) {
        Object object = redisTemplate.opsForValue().get(Constants.ACCESS_TOKEN_CACHE_NAME + ":" + token);
        if (object == null) {
            return null;
        } else {
            return JSONObject.parseObject(object.toString(), SysUser.class);  // 反序列化失败
        }
    }
    

    出现异常:com.alibaba.fastjson.JSONException: syntax error, expect {, actual string, pos 0, fastjson-version 1.2.70

    解决办法

    将原来的代码改为:

    public void cacheCybertronSupperAdmin(SysUser sysUser) {
            redisTemplate.opsForValue().set(Constants.ACCESS_TOKEN_CACHE_NAME + ":" + cybertronToken, JSONObject.toJSONString(sysUser));
        }
    
    public SysUser getSysUser(String token) {
        Object object = redisTemplate.opsForValue().get(Constants.ACCESS_TOKEN_CACHE_NAME + ":" + token);
        Object parse = JSON.parse(object);    // add
        if (object == null) {
            return null;
        } else {
            return JSONObject.parseObject(parse.toString(), SysUser.class);  // 反序列化失败
        }
    }
    

    过程探究

    我们看看原来的 object 和 现在的 parse 对象有什么不同?

    object:

    object:"{"ctime":1625641906000,"domainName":""
    

    parse:

    parse:{"ctime":1625641906000,"domainName":""
    

    不同之处如下图:显而易见

    原来是多了转义字符!!!!!!

  • 相关阅读:
    HDFS文件系统上传时序图 PB级文件存储时序图
    HDFS 文件系统流程图。PB级文件存储时序图。
    HBase 1.1.2 优化插入 Region预分配
    InputStream、OutputStream
    StringBuffer_StringBuilder
    java中的字符串
    升级的三个因素
    装饰设计模式
    IO字符流之读写缓冲区(BufferedWriter、BufferedReader)
    IO(FileWriter/FileReader)字符流:文件的写入、续写、读
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15036566.html
Copyright © 2011-2022 走看看