`

RedisTemplate SerializationFailedException: Failed to deserialize payload 异常解决

阅读更多

问题描述:

   使用RedisTemplate(spring-data-redis )进行redis操作的封装 , 现有一个incr的key , 当调用incr后返回值一切正常, 当对此key进行get调用的时候出现了如下的异常:

org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:42)
    at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:274)
    at org.springframework.data.redis.core.AbstractOperations$ValueDeserializingRedisCallback.doInRedis(AbstractOperations.java:52)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:185)
    at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:153)
    at org.springframework.data.redis.core.AbstractOperations.execute(AbstractOperations.java:86)
    at org.springframework.data.redis.core.DefaultValueOperations.get(DefaultValueOperations.java:43)
    at org.springframework.data.redis.core.DefaultBoundValueOperations.get(DefaultBoundValueOperations.java:42)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
   
Caused by: org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.EOFException
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:61)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:1)
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:40)
    ... 38 more
Caused by: java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:38)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:58)
    ... 40 more

以看出是sping对redis查询的返回结果进行deserialize的时候出错了 , 当然异常的提示也很明确:序列号对象生成这个字节数组的方法是否与默认的反序列化方法相对应;应该就是对称性吧 , 你用A方法对B进行序列号然后用不对称的反序列化方法C进行反序列号 , 肯定会有问题 , 结果在国外大神的回复中找到了答案:

     

        提简单来说调用incr后得到 值不会出错是没有经过redistemplate的deserialize, 而get必须经过 , 所以只要设置redistemplate的ValueSerializer即可:

redisTemplate.setValueSerializer(new GenericToStringSerializer<Long>(Long.class));

分享到:
评论

相关推荐

    在Java中String和Date、Timestamp之间的转换

    在Java编程中,处理日期和时间是常见的任务,涉及到的主要类有`java.util.Date`、`java.sql.Timestamp`以及它们与字符串之间的转换。本文将详细介绍如何在Java中进行String、Date和Timestamp之间的相互转换。...

    Serde 是一个 高效和通用的序列化和反序列化Rust数据结构的框架

    use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug)] struct Point { x: i32, y: i32, } fn main() { let point = Point { x: 1, y: 2 }; // Convert the Point to a JSON ...

    parity-wasm, 在 Rust 中,WebAssembly序列化/反序列化.zip

    parity-wasm, 在 Rust 中,WebAssembly序列化/反序列化 奇偶校验 wasm低级WebAssembly格式库。 文档文档 Rust WebAssembly格式序列化/反序列化添加到 Cargo.toml[dependencies]parity-wasm = "0.31

    wactor:基于疯子的wasm actor系统

    use serde :: {Deserialize, Serialize}; use wactor :: * ; struct Counter { count: u32 , } #[derive(Serialize, Deserialize)] enum Input { AddOne, } #[derive(Serialize, Deserialize, PartialEq, Debug)] ...

    cbor:CBOR对serde的支持

    Serde CBOR 此板条箱实现了的简洁二进制对象表示形式。 它建立在,它是Rust的通用序列化框架。 CBOR为JSON数据模型的超集提供了二... use serde_derive :: {Deserialize, Serialize}; use std :: error :: Error; us

    UE4JSON读取例子

    UE_LOG(LogTemp, Error, TEXT("Failed to deserialize JSON content.")); return; } ``` 4. **提取JSON数据**: 一旦解析成功,你可以通过`JsonObject`访问并提取JSON中的键值对。假设你有一个名为`ConfigData...

    适用于疯子的超小型actor API包装器-Rust开发

    struct Counter {count:u32,}#[derive(Serialize,Deserialize)]枚举输入{AddOne,}#[derive(Serialize,Deserialize,PartialEq,Debug)]枚举输出{Count(u32),} impl Actor for Counte

    experimental-nuclear-js

    目前的方法包括: serialize 和 deserialize:调用每个 store 的 (de)serialize 方法,在没有实现自定义方法时回退到 toJS/toImmutable createActions:获取动作名称列表并将动作名称映射返回给 Reflux 风格的函子...

    java序列化与ObjectOutputStream和ObjectInputStream的实例详解

    Java序列化与ObjectOutputStream和ObjectInputStream的实例详解 Java序列化是指将Java对象转换为字节流的过程,以便将其存储或传输,而后可以将其恢复为原来的对象状态。Java提供了两种方式来实现序列化: ...

    C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    定义一个静态类,类中定义静态方法,方法中参数类型前边加上this修饰符,即可实现对参数类型的方法扩展 示例如 namespace Demo{ // 这里的类必须为静态类 ... null : JsonConvert.DeserializeObject(Json); }  /

    amfext AMF扩展

    amfext 是 ActionScript Message Format(AMF)的一个开源 PHP 扩展实现。用于在 PHP 与 Flash ... ... 添加了两个函数:amf_deserialize 和 amf_serialize。这两个函数是用来对AMF消息流进行解析。代码里有完整的例子。

    Validation of viewstate MAC failed.的解决方法

    ### Validation of viewstate MAC failed 的解决方法 在 ASP.NET 应用程序中,经常会遇到“Validation of viewstate MAC failed”这一错误。此错误通常出现在 Web 应用试图加载页面时,由于视图状态(viewstate)的...

    bytes:用于优化处理 &[u8] 和 Vec 的包装器类型

    serde_bytes 用于优化处理&[u8]和Vec包装器类型。 [ dependencies ] serde_bytes = " 0.11 " 解释 在没有专门化的情况下,Rust 强制 Serde 像对待任何其他切片一样对待&[u8]... use serde :: {Deserialize, Serialize

    deserialize-json-api::bowl_with_spoon:不可变的json

    :bowl_with_spoon: deserialize-json-api 不可变的json:api反序列化器 符合 将包含的对象映射到资源 不改变原始响应对象 安装 yarn add deserialize-json-api 用法 import { deserialize } from "deserialize-json...

    path-to-error:找出发生反序列化错误的路径

    serde_path_to_error = " 0.1 " use serde :: Deserialize; use std :: collections :: BTreeMap as Map; #[derive(Deserialize)] struct Package { name: String , dependencies: Map &lt; String&gt; , } #[derive...

    C#手写jwtToken生成与校验

    var payload = JsonConvert.DeserializeObject, object&gt;&gt;(decodedPayload); // 验证Signature if (!ComputeHash(parts[0] + "." + parts[1], secretKey).Equals(parts[2])) return false; // 检查Payload的...

    node_amf_cc:AMF的快速本机C ++实现(仅适用于AMF3)

    node_amf_cc 用C ++编写的NodeJS插件,可实现。 这实现了几乎所有AMF3功能,但对于长尾负载而言,性能至少提高了一个数量级。 作为“项目的一部分而编写。... amflib/deserialize x 4.29 ops/sec ±2.02% (15 r

    使 ELF 格式的应用程序可配置

    埃尔弗雷多`elfredo` 是一个库,允许您在编译后修补可执行文件。它利用一个额外的嵌入部分来存储数据/配置,人们可能希望在不重新编译二进制文件的情况下...#[derive(Serialize, Deserialize, Debug)]pubstructPerson

    Android代码-yamlbeans

    YamlBeans makes it easy to serialize and deserialize Java object graphs to and from YAML, a human-friendly data format. Replace XML and properties files with YAML for more expressive power (lists, ...

    java源码:JSON类库 Flexjson.zip

    - 在反序列化过程中遇到问题时,Flexjson会抛出异常,帮助开发者定位并解决问题。 8. **使用示例**: ```java import flexjson.JSONSerializer; import flexjson.JSONDeserializer; public class Main { ...

Global site tag (gtag.js) - Google Analytics