如何解决如何在 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.TemplateHashModel
和 freemarker.template.TemplateSequenceModel
,参见 http://fmpp.sourceforge.net/api/fmpp/models/CsvSequence.html
CsvSequence 也是一个包含一个键的哈希:标头。这是一个存储头部名称的序列
因为我只想转换序列,而不是标题,我可以简单地将 CsvSequence
转换为正常序列,例如像这样:
${JSON.stringify(csvInput[0..])}
或
${JSON.stringify([] + csvInput)}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。