123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package com.example.course.config;
- import com.fasterxml.jackson.annotation.JsonTypeInfo;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.SerializationFeature;
- import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
- import org.springframework.context.annotation.Bean;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
- import org.springframework.data.redis.serializer.StringRedisSerializer;
- import org.springframework.stereotype.Component;
- import java.text.SimpleDateFormat;
- @Component
- public class RedisConfig {
- @Bean
- public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
- RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
- redisTemplate.setConnectionFactory(connectionFactory);
- // Key/HashKey 使用字符串序列化
- StringRedisSerializer stringSerializer = new StringRedisSerializer();
- redisTemplate.setKeySerializer(stringSerializer);
- redisTemplate.setHashKeySerializer(stringSerializer);
- // Value/HashValue 使用 JSON 序列化(带类型信息)
- GenericJackson2JsonRedisSerializer jsonSerializer = createJsonSerializer();
- redisTemplate.setValueSerializer(jsonSerializer);
- redisTemplate.setHashValueSerializer(jsonSerializer);
- redisTemplate.afterPropertiesSet();
- return redisTemplate;
- }
- /**
- * 创建支持类型信息的 JSON 序列化器
- */
- private GenericJackson2JsonRedisSerializer createJsonSerializer() {
- ObjectMapper objectMapper = new ObjectMapper();
- // 启用默认类型信息(解决嵌套对象反序列化问题)
- objectMapper.activateDefaultTyping(
- objectMapper.getPolymorphicTypeValidator(),
- ObjectMapper.DefaultTyping.NON_FINAL,
- JsonTypeInfo.As.PROPERTY
- );
- // 配置日期格式(根据实际需求调整)
- objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- objectMapper.registerModule(new JavaTimeModule());
- objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
- return new GenericJackson2JsonRedisSerializer(objectMapper);
- }
- }
|