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:没有公共构造器,无法通过反射创建实例

相关推荐
FreeBuf_2 小时前
Windows NT OS内核提权漏洞PoC已公开
windows
雲帝3 小时前
Windows虚拟机UDP大包分片排障
windows·网络协议·udp
寒水馨4 小时前
Windows下载、安装scrcpy-v4.1(附安装包scrcpy-win64-v4.1.zip)
windows·scrcpy·投屏工具·安卓投屏·usb调试·android投屏·屏幕镜像
神仙别闹5 小时前
基于QT(C++)实现Windows 自启动项查看和分析
c++·windows·qt
love530love15 小时前
OpenClaw Windows Companion 桌面客户端 连接 LM Studio 完整配置指南
人工智能·windows·python·openclaw
光年像素1 天前
Windows Win+R 运行框常用快捷命令大全
windows
寒水馨1 天前
Windows下载、安装ollama-v0.32.1(附安装包OllamaSetup.exe)
windows·llm·大语言模型·llama·本地部署·ollama·模型运行
曾阿伦1 天前
Windows 下运行 Hadoop 并部署到 AWS EMR 指南
hadoop·windows·aws
小飞侠在吗1 天前
【MySQL 排错】Navicat 连接 localhost 报 2002 (10061) 完整排查记录(Windows + MySQL 8.4 用户模式)
windows·mysql·adb
王维同学1 天前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位
c++·windows·注册表