package com.doumee.config.redis;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.parser.ParserConfig;
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import org.springframework.data.redis.serializer.RedisSerializer;
|
import org.springframework.data.redis.serializer.SerializationException;
|
import org.springframework.lang.Nullable;
|
|
import java.nio.charset.Charset;
|
import java.nio.charset.StandardCharsets;
|
|
/**
|
* Redis 值序列化器
|
* @author Eva.Caesar Liu
|
* @date 2023/04/17 12:11
|
*/
|
class RedisValueDefaultSerializer<T> implements RedisSerializer<T> {
|
|
private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
|
|
private final ParserConfig parserConfig = new ParserConfig();
|
|
{
|
parserConfig.setAutoTypeSupport(true);
|
}
|
|
private final Class<T> type;
|
|
RedisValueDefaultSerializer(Class<T> type) {
|
this.type = type;
|
}
|
|
public T deserialize(@Nullable byte[] bytes) throws SerializationException {
|
if (bytes == null || bytes.length == 0) {
|
return null;
|
}
|
try {
|
return JSON.parseObject(new String(bytes, DEFAULT_CHARSET), type, parserConfig);
|
} catch (Exception e) {
|
throw new SerializationException("Could not serialize value of redis: " + e.getMessage(), e);
|
}
|
}
|
|
public byte[] serialize(@Nullable Object value) throws SerializationException {
|
if (value == null) {
|
return new byte[0];
|
}
|
try {
|
return JSON.toJSONBytes(value, SerializerFeature.WriteClassName, SerializerFeature.PrettyFormat);
|
} catch (Exception e) {
|
throw new SerializationException("Could not serialize value of redis: " + e.getMessage(), e);
|
}
|
}
|
|
}
|