Redis 乱码和LocalDateTime类型缓存问题
问题
Java 8 date/time type `java.time.LocalDateTime` not supported by default: add Module \"com.fasterxml.jackson.datatype:jackson-datatype-jsr310\" to enable handling
还有redis 16进制乱码的问题
引入依赖
<dependency><groupId>com.fasterxml.jackson.datatype</groupId><artifactId>jackson-datatype-jsr310</artifactId><version>2.13.3</version>
</dependency>
自定义RedisTemplate
/*** Redis配置类* 配置RedisTemplate的序列化方式*/
@Configuration
public class RedisConfig {/*** 自定义RedisTemplate,使用StringRedisSerializer和Jackson2JsonRedisSerializer* 解决Redis中的key和value显示为16进制的问题*/@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {// 创建RedisTemplate对象RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();// 设置连接工厂redisTemplate.setConnectionFactory(redisConnectionFactory);// 创建Jackson2JsonRedisSerializer序列化器Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);// 创建支持Java 8日期时间类型的ObjectMapperObjectMapper objectMapper = new ObjectMapper();// 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和publicobjectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);// 注册JavaTimeModule以支持Java 8日期时间类型objectMapper.registerModule(new JavaTimeModule());// 禁用将日期写为时间戳的功能objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);// 设置ObjectMapperjackson2JsonRedisSerializer.setObjectMapper(objectMapper);// 设置Key的序列化redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());// 设置Value的序列化redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// 初始化RedisTemplateredisTemplate.afterPropertiesSet();return redisTemplate;}
}