diff --git a/src/main/java/com/ycwl/basic/config/CustomRedisCacheManager.java b/src/main/java/com/ycwl/basic/config/CustomRedisCacheManager.java index 6c70b0f2..dcbe1de2 100644 --- a/src/main/java/com/ycwl/basic/config/CustomRedisCacheManager.java +++ b/src/main/java/com/ycwl/basic/config/CustomRedisCacheManager.java @@ -2,6 +2,8 @@ package com.ycwl.basic.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.fasterxml.jackson.databind.jsontype.BasicPolymorphicTypeValidator; +import com.fasterxml.jackson.databind.jsontype.PolymorphicTypeValidator; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; @@ -28,6 +30,13 @@ public class CustomRedisCacheManager extends CachingConfigurerSupport { public RedisCacheConfiguration redisCacheConfiguration() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); + + // Configure type handling to prevent ClassCastException + PolymorphicTypeValidator typeValidator = BasicPolymorphicTypeValidator.builder() + .allowIfBaseType(Object.class) + .build(); + objectMapper.activateDefaultTyping(typeValidator, ObjectMapper.DefaultTyping.NON_FINAL); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class); RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig(); @@ -55,6 +64,13 @@ public class CustomRedisCacheManager extends CachingConfigurerSupport { // Configure Jackson2JsonRedisSerializer with JavaTimeModule for value serialization ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); + + // Configure type handling to prevent ClassCastException + PolymorphicTypeValidator typeValidator = BasicPolymorphicTypeValidator.builder() + .allowIfBaseType(Object.class) + .build(); + objectMapper.activateDefaultTyping(typeValidator, ObjectMapper.DefaultTyping.NON_FINAL); + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);