`

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中String和Date、Timestamp之间的转换 的相关资料,需要的朋友可以参考下

    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

    适用于疯子的超小型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 风格的函子...

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

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

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

    主要介绍了java序列化与ObjectOutputStream和ObjectInputStream的实例详解的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下

    amfext AMF扩展

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

    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...

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

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

    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...

    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, ...

    羡慕-将环境变量反序列化为类型安全的结构-Rust开发

    羡慕将环境变量反序列化为类型安全的结构:package:install将以下内容添加...#[derive(Deserialize,Debug)] struct Config {foo:u16,bar:bool,baz:String,boom:Option } fn main(){匹配envy :: from_env ::

    validator:简单验证Rust结构

    安装: [ dependencies ]validator = { version = " 0.12 " , features = [ " derive " ] } 一个简短的例子: use serde :: Deserialize;// A trait that the Validate derive will impluse validator :: {Validate...

    decimal-rs:高精度小数

    启用此可选依赖项后, Decimal实现serde::Serialize和serde::Deserialize特征。 用法 要构建一个十进制,请使用Decimal : use decimal_rs :: Decimal; let n1: Decimal = "123" . parse (). unwrap (); let n2: ...

    Serialize and Deserialize Java 示例程序

    Serialize and Deserialize Java 示例程序。简单来讲,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加...

    Json_Deserialize:使用 Json.NET 显示 Json 反序列化的示例应用程序

    Json_Deserialize 使用 Json.NET 显示 Json 反序列化的示例应用程序 在以下位置找到整个教程:chauhanvaibhav.net

Global site tag (gtag.js) - Google Analytics