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 A机器免密码SSH登录B机器
    Linux 系统命令笔记
    整理笔记有感而发
    Linux(Centos)快速搭建SVN
    APP接口自动化测试JAVA+TestNG(三)之HTTP接口测试实例
    Windows服务器环境下jenkins下载和安装
    Win10系统如何在防火墙里开放端口
    Java 通过地址获取经纬度
    一、springBoot简介与环境搭建
    2018年尚硅谷《全套Java、Android、HTML5前端视频》
  • 原文地址:https://www.cnblogs.com/hnxbp/p/15036566.html
Copyright © 2011-2022 走看看