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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
云解析 DNS,旗舰版 1个月
简介: 错误为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

    既然找到了原因,安排!

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

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

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

难道是姿势不对?

换个坐姿,还是不行。

咋整?

直接看Redis数据库数据!

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

image.png

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

image.png

如何解决?

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

importorg.springframework.data.geo.Metric;
/*** @Description : 自定义Metric 类*/publicclassKilometersMetricimplementsMetric {
publicKilometersMetric(){
    }
@OverridepublicdoublegetMultiplier() {
return6378.137D;
    }
@OverridepublicStringgetAbbreviation() {
return"km";
    }
}

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

image.png

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

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
5天前
|
XML 数据格式 开发者
解析数据的Beautiful Soup 模块(一)
解析数据的Beautiful Soup 模块(一)
25 0
|
21小时前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
9 3
|
21小时前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
11 2
|
3天前
|
安全 Java 编译器
Java 泛型深入解析:类型安全与灵活性的平衡
Java 泛型通过参数化类型实现了代码重用和类型安全,提升了代码的可读性和灵活性。本文深入探讨了泛型的基本原理、常见用法及局限性,包括泛型类、方法和接口的使用,以及上界和下界通配符等高级特性。通过理解和运用这些技巧,开发者可以编写更健壮和通用的代码。
|
13天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
97 11
|
5天前
|
前端开发 Python
解析数据的Beautiful Soup 模块(二)
解析数据的Beautiful Soup 模块(二)
14 1
|
3天前
|
JSON JavaScript API
商品详情数据接口解析返回的JSON数据(API接口整套流程)
商品详情数据接口解析返回的JSON数据是API接口使用中的一个重要环节,它涉及从发送请求到接收并处理响应的整个流程。以下是一个完整的API接口使用流程,包括如何解析返回的JSON数据:
|
5天前
|
消息中间件 监控 关系型数据库
MySQL数据实时同步到Elasticsearch:技术深度解析与实践分享
在当今的数据驱动时代,实时数据同步成为许多应用系统的核心需求之一。MySQL作为关系型数据库的代表,以其强大的事务处理能力和数据完整性保障,广泛应用于各种业务场景中。然而,随着数据量的增长和查询复杂度的提升,单一依赖MySQL进行高效的数据检索和分析变得日益困难。这时,Elasticsearch(简称ES)以其卓越的搜索性能、灵活的数据模式以及强大的可扩展性,成为处理复杂查询需求的理想选择。本文将深入探讨MySQL数据实时同步到Elasticsearch的技术实现与最佳实践。
31 0
|
5月前
|
存储 NoSQL Redis
redis存储原理和数据模型
redis存储原理和数据模型
60 1
|
2月前
|
存储 NoSQL Redis
Redis存储原理与数据模型
Redis存储原理与数据模型

热门文章

最新文章

推荐镜像

更多