记录下获取Redis的GEO类型数据后,使用FastJson解析报错问题-阿里云开发者社区

开发者社区> SevenSun> 正文

记录下获取Redis的GEO类型数据后,使用FastJson解析报错问题

简介: 错误为autotype is not support。
+关注继续查看

一、问题描述

项目追加Redis缓存后,报错autotype is not support错误。根据网上资料解决后,报Json解析错误,后查看Redis数据库中该数据格式发现,存入的是枚举名称(即字符串),而接收的是对象类型,故报错

二、查找并解决

1.查看日志,报autoType is not support错误,上百度!--->FastJson解析失败,autotype is not support!这是博主给出的原因。

2017年3月15日,fastjson官方发布安全升级公告,该公告介绍fastjson在1.2.24及之前的版本存在代码执行漏洞,当恶意攻击者提交一个精心构造的序列化数据到服务端时,由于fastjson在反序列化时存在漏洞,可导致远程任意代码执行。

自1.2.25及之后的版本,禁用了部分autotype的功能,也就是”@type”这种指定类型的功能会被限制在一定范围内使用。

而由于反序列化对象时,需要检查是否开启了autotype。所以如果反序列化检查时,autotype没有开启,就会报错

image.png

    既然找到了原因,安排!

@Configuration
public class RedisConfig {
 
    RedisConfig(){
        //打开autotype功能
        ParserConfig.getGlobalInstance()
                //需要开启autotype的全类名
            .addAccept("com.entity.dto.UserDTO");
    }
}

然后接收报错,19F39FB3.jpg,不过这次是json格式错误导致解析失败。

百思不得其解,为啥存入时序列化没问题,取出反序列化就报错?

难道是姿势不对?

换个坐姿,还是不行。

咋整?

直接看Redis数据库数据!

果不其然,Java中Metric是个对象,但是数据库中确实字符串!

image.png

为何出现这种情况呢?是因为,在给Metric赋值的时候,采取了枚举类,此时序列化会序列化为字符串,而不是对象类型!!!

image.png

如何解决?

自定义Metric对象,而不是采用枚举类!

import org.springframework.data.geo.Metric;

/**
 * @Description : 自定义Metric 类
 */
public class KilometersMetric implements Metric {

    public KilometersMetric(){

    }

    @Override
    public double getMultiplier() {
        return 6378.137D;
    }

    @Override
    public String getAbbreviation() {
        return "km";
    }
}

此时再看Redis中数据格式,已经为对象形式,就没有了序列化问题了。

image.png

完结,撒花,又是1A049FEF.jpg的一天。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C# List的数据字典作用
    有时候需要使用一个数据字典的表来罗列大批的数据,这时使用List是比较好的方法。 class Program {     public static Liststring> STAR...
725 0
Flutter 16: 图解 ListView 异步加载数据与 Loading 等待
0 基础学习 Flutter,第十六步:ListView 日常小问题,包括异步数据加载及 Loading 等待过程~
4807 0
redis数据结构实现--压缩列表(ziplist)
redis数据结构实现(六) 压缩列表(ziplist)是链表键和哈希键的底层实现之一。当链表键或哈希键只有少量列表项,且列表项中是小整数值或短字符串,则会采用压缩列表作为底层实现。 6.1 压缩列表的实现 压缩列表是为了节约内存而开发的,由一系列特殊编码的连续内存块组成的顺序型数据结构。
2048 0
Android开发18——获取网络资源之json数据
一、项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据。 本文获取web项目返回的JSON数据。Android应用解析JSON比XML性能要好,但有许多项目仍然采用的是XML。     二、实例代码 Web项目 /** * 新闻业务类 * * @author 徐越 * */ public cl
1066 0
使用ServiceStack.Redis实现Redis数据读写
原文:使用ServiceStack.Redis实现Redis数据读写 User.cs实体类 public class User { public string Name { get; set; ...
1460 0
+关注
SevenSun
技术创造美好生活!
23
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载