springboot项目中使用redis对数据进行解析报Invalid numeric value: Leading zeroes not allowed错误

错误分析

在使用redis获取发送的短信验证码,偶尔会报如下错误信息

2019-01-15 10:32:15.104 [http-nio-8080-exec-10] WARN  org.springframework.web.servlet.PageNotFound:1176 - No mapping found f lowed
 at [Source: [B@2836aebe; line: 1, column: 2]; nested exception is com.fasterxml.jackson.core.JsonParseException: Invalid numeric value: Leading zeroes not allowed
 at [Source: [B@2836aebe; line: 1, column: 2]
 at org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer.deserialize(Jackson2JsonRedisSerializer.java:73)
 at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:318)
 at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:58)
 at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:207)
 at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:169)

通过看日志发现是因为使用的jackson解析redis中存储的数据,会把纯数字的短信验证码当作是数字类型来解析,之所以偶尔会报错是因为生成的随机数验证码中可能会以0开头,导致jackson认为这是一个无效的数字才报的错,然后使用RedisTemplate<String, String>当作字符串的方式获取短信验证码仍然不行,还是使用的jackson解析短信验证码,检测redis的配置发现是因为项目中指定的redisTemplate的数据解析方式为jackson解析
在这里插入图片描述

解决办法:

再配置一个StringRedisTemplate的redis模板:

@Bean(name = "stringRedisTemplate")
 public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory
   redisConnectionFactory){
     return new StringRedisTemplate(redisConnectionFactory);
 }

使用方法:
在这里插入图片描述

  • 在获取短信验证码的时候stringRedisTemplate来获取,这样就会把短信验证码通过字符串的方式解析,以0开头也不会报解析错误的问题
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值