Spring boot 反序列化PageImpl时出错:无法构造'org.springframework.data.domain.PageImpl'的实例`
问题是,在将Spring缓存与redis缓存管理器一起使用时,由于没有默认构造函数,无法对Spring可分页响应进行反序列化 使用的spring引导版本是2.1.4.0版本 使用序列化程序的Redis配置类Spring boot 反序列化PageImpl时出错:无法构造'org.springframework.data.domain.PageImpl'的实例`,spring-boot,spring-cache,jackson2,fasterxml,spring-data-commons,Spring Boot,Spring Cache,Jackson2,Fasterxml,Spring Data Commons,问题是,在将Spring缓存与redis缓存管理器一起使用时,由于没有默认构造函数,无法对Spring可分页响应进行反序列化 使用的spring引导版本是2.1.4.0版本 使用序列化程序的Redis配置类 @Bean public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory) { RedisCacheConfiguration redisCacheConfig
@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();
}
我试图使用SpringCache和Redis作为缓存后端,在Redis缓存中缓存SpringRESTAPI页面结果响应
@GetMapping
@Cacheable("Article_Response_Page")
public Page<Article> findAll(Pageable pageable) {
return articleRepository.findAll(pageable);
}
我尝试为PageImpl提供一个自定义序列化程序,但PageRequest实现和排序实现出现异常,这都是Spring'org.springframework.data.domain'包的一部分
一定有更好的方法来解决这个问题,我想知道在SpringCache中解决这类问题的最佳方法
这是在迁移到SPRING BOOT v2后出现的Jackson bug吗?我暂时通过使用JAVA序列化程序解决了这个问题,但想知道如何在打开JSON值序列化程序的情况下解决这个问题
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig().disableCachingNullValues()
.serializeValuesWith(
RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.java()));
您可以使用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);
}
}
公共类PageImpl扩展org.springframework.data.domain.PageImpl{
@JsonCreator(mode=JsonCreator.mode.PROPERTIES)
publicpageimpl(@JsonProperty(“content”)列表内容,
@JsonProperty(“编号”)int页,
@JsonProperty(“大小”)int size,
@JsonProperty(“totalElements”)长(总计){
超级(内容,页面请求,共页,大小),总计);
}
}
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);
}
}