问题1:
java.lang.ClassCastException:
org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String
出现此错误主要是调用了无参数的方法。解决的方法是配置一个自定义的keyGenerator。
注意,方法名keyGenerator不能改为其他例如customKeyGenerator, 否则还是会报错(不知是否是版本问题)
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
public Object generate(Object target, Method method, Object... objects) {
StringBuilder sb = new StringBuilder();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : objects) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
}
问题2:
java.lang.ClassCastException:
java.util.LinkedHashMap cannot be cast to com.your.object
报错的原因主要是defaultSerializer或valueSerializer使用了Jackson2JsonRedisSerializer类
解决的方法将Jackson2JsonRedisSerializer改为GenericJackson2JsonRedisSerializer
<!-- 配置RedisTemplate -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
<property name="keySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="hashKeySerializer">
<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
</property>
<property name="defaultSerializer">
<bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"> </bean>
</property>
</bean>