Эта проблема легко решается добавлением переопределения метода JavaType getJavaType (Class clazz) в Jackson2JsonRedisSerializer.Документация гласит:
<code>/**
* Returns the Jackson {@link JavaType} for the specific class.
* <p>
* Default implementation returns {@link TypeFactory#constructType(java.lang.reflect.Type)}, but this can be
* overridden in subclasses, to allow for custom generic collection handling. For instance:
*
* <pre class="code">
* protected JavaType getJavaType(Class<?> clazz) {
* if (List.class.isAssignableFrom(clazz)) {
* return TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, MyBean.class);
* } else {
* return super.getJavaType(clazz);
* }
* }
*
* * @param clazz класс для возврата java-типа для * @ return java-типа * / protected JavaType getJavaType (Classclazz) {return TypeFactory.defaultInstance (). constructType (clazz);}
Итак, я просто переопределил этот метод следующим образом:
public class CustomSerializer extends Jackson2JsonRedisSerializer
{
public JurisdictionsSerializer(Class type)
{
super(type);
}
@Override
protected JavaType getJavaType(Class clazz)
{
return TypeFactory.defaultInstance()
.constructMapType(Map.class, Integer.class, String.class);
}
}
И затем добавьте этот сериализатор в конфигурацию redis следующим образом:
@Bean
public RedisCacheConfiguration myCacheConfiguration()
{
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ZERO)
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new CustomSerializer(Map.class)));
}