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

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

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

  • 相关阅读:
    linux 安装 Chrome
    J2EE版本
    Java 源码解析之局部变量检查
    /etc/xinetd.conf 和 /etc/xinetd.d/*【新网络服务配置】
    Linux 内核编译
    linux 汇编
    /etc/ethers【地址映射】
    Linux LAMP 搭建
    Linux ftp 使用
    linux apache
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15036566.html
Copyright © 2011-2022 走看看