微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 FreeMarker 中序列化一个 fmpp CsvSequence?

如何解决如何在 FreeMarker 中序列化一个 fmpp CsvSequence?

我在 freemarker 模板中尝试了 using both flexjson.JSONSerializer and com.fasterxml.jackson.databind.ObjectMapper,将通过 csv 数据加载器 csv(menu.csv,{trimCells: true}) 加载的 csv 文件转换为 JSON。

当我尝试运行它时,出现以下异常:

...
Caused by: java.lang.UnsupportedOperationException: Operation supported only on TemplateHashModelEx. fmpp.models.CsvSequence does not implement it though.
    at freemarker.ext.beans.HashAdapter.getModelEx(HashAdapter.java:186)
    at freemarker.ext.beans.HashAdapter.access$000(HashAdapter.java:38)
    at freemarker.ext.beans.HashAdapter$1.iterator(HashAdapter.java:99)
    at com.fasterxml.jackson.databind.ser.std.MapSerializer.serializefields(MapSerializer.java:696)
    ... 46 common frames omitted

我不知道 FreeMarker 的任何内部结构(目前),但在我看来它像 CsvSequence does implement the freemarker.template.TemplateHashModel 而不是 freemarker.template.TemplateHashModelEx

only place I found getModelEx is in the HashAdaptor,所以我假设它使用较新的哈希接口。

知道如何解决这个问题吗?

解决方法

CsvSequence 实现了 freemarker.template.TemplateHashModelfreemarker.template.TemplateSequenceModel,参见 http://fmpp.sourceforge.net/api/fmpp/models/CsvSequence.html

CsvSequence 也是一个包含一个键的哈希:标头。这是一个存储头部名称的序列

因为我只想转换序列,而不是标题,我可以简单地将 CsvSequence 转换为正常序列,例如像这样:

${JSON.stringify(csvInput[0..])}

${JSON.stringify([] + csvInput)}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。