Cacheable List 接口二次读取报错

java 复制代码
/**
     * 获取所有活跃的自定义字段(缓存 DTO)
     * 缓存 DTO 而非实体类,避免序列化关联对象(Space、CustomChoice)
     */
    @Cacheable(cacheResolver = "tenantDynamicCacheResolver",
            cacheNames = {"system:customField:"},
            key = "'customField'")
    public List<CustomFieldCacheDto> getAllActiveCustomFieldListInCache() {
        List<CustomField> entities = customFieldRepository.findAllDataAsEntity();
        return entities.stream()
                .map(CustomFieldConvert.INSTANCE::convertToCacheDto)        
                 .toList();

    }

二次读取会报错,

java 复制代码
     List<CustomFieldCacheDto> fieldList = service.getAllActiveCustomFieldListInCache();

将 toList() 替换为.collect(Collectors.toList()); 正常。

根本原因

1. 返回的 List 实现类不同

java

复制代码
// toList() - Java 16+ 引入
.stream().toList()  
// 返回: ImmutableCollections.ListN (不可变列表)

// Collectors.toList()
.stream().collect(Collectors.toList())
// 返回: ArrayList (可变列表)

2. 序列化器无法处理不可变列表

Redisson/Jackson 在反序列化时:

  • ArrayList:有默认无参构造器,可以正常实例化

  • ImmutableCollections.ListN:没有公共构造器,无法通过反射创建实例

相关推荐
公子小六8 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
学海浪太大13 小时前
笔记本电脑插入显示器没反应
windows
黄一一91124314 小时前
告别手动敲字,本地截图 OCR,识别完直接复制!开源截图识别工具
windows·ocr·开源软件·贴图
洪流之源16 小时前
Windows 远程 Ubuntu 24.04 桌面
linux·windows·ubuntu
是小李呀17 小时前
Windows 虚拟内存配置完全指南:从原理到实操,彻底解决内存不足与 OOM 问题
windows
毕竟是shy哥19 小时前
windows电脑WSL下本地构建docker镜像
windows·docker·容器
kakakahahahaha1 天前
【Windows】C盘低空间反复复发的排查与扩容边界
c语言·windows·电脑·笔记本电脑·内容运营·软件需求
2301_800074211 天前
map,list简单方法
windows·python·list
技术不好的崎鸣同学1 天前
Windows 红队实战:前言
windows
吴声子夜歌1 天前
Guava——基本工具(二)
windows·python·guava