Spring boot 反序列化PageImpl时出错:无法构造'org.springframework.data.domain.PageImpl'的实例`

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

问题是,在将Spring缓存与redis缓存管理器一起使用时,由于没有默认构造函数,无法对Spring可分页响应进行反序列化

使用的spring引导版本是2.1.4.0版本

使用序列化程序的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();

}
我试图使用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);
    }
}