【发布时间】:2019-12-15 21:45:20
【问题描述】:
在我的 Spring 应用程序中,我使用 Freemarker 生成导出文件 - 带有标题的简单纯文本和循环 <#list></#list> 以呈现项目列表。
@Bean
public freemarker.template.Configuration freemarkerConfiguration() throws IOException, TemplateException {
return new FreeMarkerConfigurationFactoryBean().createConfiguration();
}
// ...
Template template = getFreemarkerTemplate();
Writer fileWriter = getFileWriter(outputFile);
template.process(getExportData(), writer);
// flush and close writer, some additional business logic
我想将当前 Windows \r\n (CRLF) 的行尾格式设置为 Unix \n (LF)
我实际尝试过但不喜欢或不起作用的方法
- 使用 Notepad++ 手动转换 .ftl 文件 EOL - 我不想用许多编辑器处理我的源文件,还有 IntelliJ Git 插件将 EOL 转换为 CRLF - 即使我会修改这个,也不能保证我的队友会这样做,也可能是其他地方的问题
- 在每一行的末尾添加
<#rt>${'\n'}- 它只是污染了我的代码,开发人员必须记得在模板更改时添加它 - 添加
<#assign str = str?replace(...)- 似乎不可能,因为此替换仅适用于变量,而不是当前整个文件,并且我没有找到将模板呈现为变量的方法(我可以创建然后包装更改 EOL,但老实说,这看起来也不是一个好的解决方案)
是否有任何全局方法来设置 EOL 格式,而无需手动和单独操作每个 .ftl?
【问题讨论】:
-
为什么?您需要一个自定义编写器,它将任何变化的序列转换为 Unix 格式。
-
仅为此目的编写自定义编写器听起来像是巨大的开销 - 在
Configuration和Template中有许多不同的设置,包括编码 - 老实说,我预计更改 EOL 格式将是单行的跨度> -
因为你已经提到了,你可以像这样捕获输出:
<#assign output>...generate content here...</#assign>。但当然,这比在传递给 FreeMarker 的Writer中过滤要糟糕得多。
标签: java spring freemarker