问题是将Spring缓存与Redis缓存管理器一起使用时,由于没有默认构造函数,因此无法反序列化Spring Pageable响应
使用的Spring Boot版本是2.1.4.RELEASE
使用序列化程序的Redis配置类
spell1 = random.randint(5, 10)
spell2 = random.randint(0, 20)
heal1 = random.randint(5, 10)
bspell1 = random.randint(0, 10)
bspell2 = random.randint(10, 20)
bspell3 = 15
bheal1 = 10
bossturn = (bspell3, bspell2, bspell1, bheal1)
usercasting = input("Cast a Spell, choose between spell1, spell2, heal1: ")
if usercasting == "heal1":
hp += heal1
print("You healed yourself by", heal1, "!")
print(hp)
if usercasting:
random.choice(bossturn)
print(random.choice(bossturn))
我正在尝试使用Spring缓存和Redis作为缓存后端在Redis缓存中缓存Spring REST API页面结果响应
PermissionManager
我能够看到使用RedisSerializer.json()序列化器将页面作为JSON缓存在Redis缓存中,但是在下一次调用期间,当从缓存中读取数据时,我得到了以下异常
@Bean
public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().disableCachingNullValues()
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json()));
redisCacheConfiguration.usePrefix();
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory)
.cacheDefaults(redisCacheConfiguration).build();
}
我尝试为PageImpl提供一个自定义序列化程序,然后在Spring'org.springframework.data.domain'包的所有部分中获得了PageRequest实现和Sort实现的异常
必须有一种更好的方法来解决此问题,我想知道在Spring缓存中解决此类问题的最佳方法
这是转移到SPRING BOOT v2后的Jackson错误吗?
答案 0 :(得分:0)
我暂时通过使用JAVA序列化程序解决了该问题,但想知道如何通过打开JSON值序列化程序来解决此问题
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().disableCachingNullValues()
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.java()));
答案 1 :(得分:0)
您可以使用PageImpl的包装器,然后:
public class PageImpl<T> extends org.springframework.data.domain.PageImpl<T> {
@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)
public PageImpl(@JsonProperty("content") List<T> content,
@JsonProperty("number") int page,
@JsonProperty("size") int size,
@JsonProperty("totalElements") long total) {
super(content, PageRequest.of(page, size), total);
}
}