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 小时前
Windows 11 下惠普 M126nw 驱动报错溯源:完整包、WSD 端口与类驱动记录
windows·程序人生·电脑
技术不好的崎鸣同学9 小时前
第七章:模块踩踏以覆写导出函数绕过CFG
c++·windows·安全·系统安全
黄一一9112439 小时前
吾爱大佬开发,离线可用!PDF文件处理工具,本地网页版文件-浏览器里就能搞定,所有操作系统可用
windows·安全·阿里云·pdf·.net·开源软件
牛马工作号11 小时前
Docker Compose 部署 FreeRADIUS:从 AAA 原理到 Windows 有线 802.1X 认证实战
windows·docker·容器
李少兄1 天前
Windows 11 环境下 BAT 脚本无法执行的排查与修复指南
windows
解道Jdon1 天前
FigCraft把Figma用Rust从零重写了一遍
ide·windows·git·svn·eclipse·github·visual studio
zh73141 天前
Docker Desktop on Windows 挂载问题根因分析
windows·docker·容器
Surpass-HC1 天前
WSL2 windows-ubuntu
linux·windows·ubuntu
遇印记1 天前
网络安全,数据链路层,物理层
运维·服务器·网络·windows·学习
mx_jun1 天前
Wireshark 蓝牙 HCI 日志分析常用操作速查
windows·microsoft·hci·bt