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":""
    

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

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

  • 相关阅读:
    telnet linux 参数
    telnet服务 linux机器
    how to learn
    mysql关键字
    linux 下iptables配置详解
    C#调用开源图像识别类库tessnet2
    netty入门实例
    android布局属性详解
    安卓高手之路之ClassLoader(四)
    安卓高手之路之 GDI图形引擎篇
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15036566.html
Copyright © 2011-2022 走看看