You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FreeMarker模板渲染Map嵌套List的表格时报NonSequenceOrCollectionException如何解决

问题原因

  1. 服务层数据绑定错误:你构造了List<MessageRequest>类型的messageRequests对象,但最终放入FreeMarker模板参数的是map自身,而非该列表:
// 错误写法
map.put("messages",map);

这导致模板中拿到的messages是HashMap类型(也就是异常提示的extended_hash),而非你预期的列表。
2. 模板遍历逻辑错误:你按照嵌套列表的写法写了两层<#list>,且第一层用了哈希遍历的key, value写法,和实际传入的数据类型不匹配。
3. 模板字段映射错误:原有表格第二列写了${item},会直接输出对象的toString结果,和表头字段不匹配。

修复步骤

第一步:修改服务层数据绑定逻辑

把sendEmail方法中参数赋值的代码修改为:

public MailResponse sendEmail() {
    List<MessageRequest> messageRequests = new ArrayList<>();
    messageRequests.add(new MessageRequest("test id","test name","000001","covaxin","free","100" , DateUtil.getTodayDate()));
    MailRequest mailRequest = new MailRequest();
    mailRequest.setFrom("electrode.1990@gmail.com");
    mailRequest.setName("manjosh");
    mailRequest.setToArr(new String[]{"email@gmail.com"});
    mailRequest.setSubject("Test email from vaccine slot tracker app");
    Map<String,Object> map = new HashMap<>();
    // 修正:把列表放入参数,而非map自身
    map.put("messages",messageRequests);
    // 无用代码可以直接删除
    // map.put("test",map);
    return sendEmail(mailRequest,map);
}

第二步:修改FreeMarker模板遍历逻辑

删除多余的双层遍历,直接遍历messages列表,同时修正字段映射:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vaccine availability tracker</title>
</head>
<body>
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td align="center" valign="top"
                style="background-color: #F0F8FF;"><br> <br>
                <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr class="tableHeader">
                        <td>Center Id</td>
                        <td>Center name</td>
                        <td>Area Pincode</td>
                        <td>Vaccine</td>
                        <td>Vaccine fee</td>
                        <td>Available capacity</td>
                        <td>Date</td>
                    </tr>
                         <!-- 修正:单层遍历列表即可 -->
                         <#list messages as item>
                             <tr class="tableBody">
                                 <td>${item.centerId}</td>
                                 <td>${item.name}</td>
                                 <td>${item.pincode}</td>
                                 <td>${item.vaccine}</td>
                                 <td>${item.fee}</td>
                                 <td>${item.available_capacity}</td>
                                 <td>${item.date}</td>
                                </tr>
                            </#list>
            </table> <br> <br></td>
        </tr>
    </table>
</body>
</html>

内容的提问来源于stack exchange,提问作者manjosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 00:24:01