最近在编写项目时,用redis存储结果一直报转换异常
在这里插入图片描述
对此我有了以下思路
1.在mysql进行格式转换
2.在java先转换
3.存json之前就进行格式转换

但是以上方法都不行,因为数据需要的是date类型,如果走转换又过慢
在这里插入图片描述
有大佬提了一下使用序列化解决,我就尝试了一下,还真可以,以下是我编写思路
1.首先需要序列化的类继承Serializable接口
在这里插入图片描述
2.编写序列化工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.tiantai.policy.utils;

import java.io.*;

public class SerializeUtil {
// 序列化
public static byte[] serialize(Object object) {

ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
System.err.println("序列化失败" + e.getMessage());
}
return bytes;
}

// 反序列化
public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {

ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
} catch (Exception e) {
System.err.println("反序列化失败" + e.getMessage());
}
return ois.readObject();
}
}

3.使用序列化存储

1
2
3
4
HashMap<Integer , Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put(airChannelEnum.getType(), SerializeUtil.serialize(selectPage));
redisTemplate.opsForList().leftPush("error",gson.toJson(objectObjectHashMap));

在这里插入图片描述
4.反序列化读取
在这里插入图片描述

1
Page deserialize = (Page)SerializeUtil.deserialize(entry.getValue());

第一个红框是我用gson进行json转换
第二个红框是序列化后强转为原对象