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 implements RedisSerializer { private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; private final ParserConfig parserConfig = new ParserConfig(); { parserConfig.setAutoTypeSupport(true); } private final Class type; RedisValueDefaultSerializer(Class 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); } } }