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

相关推荐
走,带你去玩6 小时前
windows电脑 trae对接lanhu-mcp
windows
戒了,最后一次12 小时前
Windows 安装 FFmpeg 完整教程(附环境变量配置 + 常用命令示例)
windows·ffmpeg
liulilittle14 小时前
DeepSeek Harness 自定义模型提供商配置
前端·javascript·人工智能·windows·llm·deepseek·harness
fruge15 小时前
Windows部署MiGPT GUI:小爱音箱接入大模型、TTS与自定义人设
windows
源码学社16 小时前
DeerFlow Windows 本地运行教程(uv)
windows·uv·沙箱·deerflow·超级智能体·deerflow安装
Sombra_Olivia16 小时前
复现Windows Server服务RPC请求缓冲区溢出漏洞(MS08067)
网络·windows·安全·web安全·网络安全·渗透测试·vulhub
-天道酬勤-16 小时前
查看Windows电脑开机时间
windows·电脑
该用户可能存在17 小时前
【Win11优化】StartAllBack实战:解决任务栏合并、右键折叠等痛点
windows·性能优化·win11·windows 11·startallback·任务栏·开始菜单
特立独行的猫a19 小时前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
安且惜1 天前
Windows或mac支持本地抓包
windows·macos