diff --git a/bonus-common/bonus-common-redis/pom.xml b/bonus-common/bonus-common-redis/pom.xml index 8fd4cea..4f57eb0 100644 --- a/bonus-common/bonus-common-redis/pom.xml +++ b/bonus-common/bonus-common-redis/pom.xml @@ -28,7 +28,11 @@ com.bonus bonus-common-core - + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + + diff --git a/bonus-common/bonus-common-redis/src/main/java/com/bonus/common/redis/configure/RedisConfig.java b/bonus-common/bonus-common-redis/src/main/java/com/bonus/common/redis/configure/RedisConfig.java index 702567c..fc0f014 100644 --- a/bonus-common/bonus-common-redis/src/main/java/com/bonus/common/redis/configure/RedisConfig.java +++ b/bonus-common/bonus-common-redis/src/main/java/com/bonus/common/redis/configure/RedisConfig.java @@ -1,15 +1,28 @@ package com.bonus.common.redis.configure; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.support.NullValue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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.RedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; +import java.io.IOException; + /** * redis配置 * @@ -20,6 +33,8 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; @AutoConfigureBefore(RedisAutoConfiguration.class) public class RedisConfig extends CachingConfigurerSupport { + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + @Bean @SuppressWarnings(value = { "unchecked", "rawtypes" }) public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) @@ -27,7 +42,8 @@ public class RedisConfig extends CachingConfigurerSupport RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); - FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); +// FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + RedisSerializer serializer = new GenericJackson2JsonRedisSerializer(OBJECT_MAPPER); // 使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); @@ -40,4 +56,17 @@ public class RedisConfig extends CachingConfigurerSupport template.afterPropertiesSet(); return template; } + + static { + OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + OBJECT_MAPPER.registerModule(new JavaTimeModule()); + OBJECT_MAPPER.registerModule((new SimpleModule()).addSerializer(new StdSerializer(NullValue.class) { + public void serialize(NullValue value, JsonGenerator gen, SerializerProvider provider) throws IOException { + gen.writeStartObject(); + gen.writeStringField("@class", NullValue.class.getName()); + gen.writeEndObject(); + } + })); + OBJECT_MAPPER.activateDefaultTyping(OBJECT_MAPPER.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY); + } }