定义 Freemarker EOL 格式(\n 而不是 \r\n)

Define Freemarker EOL format (\n instead of \r\n)

在我的 Spring 应用程序中,我使用 Freemarker 生成导出文件 - 带有 header 的简单纯文本和循环 <#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)

我实际尝试过但不喜欢或不起作用的东西

是否有任何 全局 设置 EOL 格式而无需手动和单独操作每个 .ftl 的方法?

没有这样的配置选项(截至 2.3.29)。 FreeMarker 仅按原样输出模板的静态文本部分。尽管您不喜欢这种方法,但我相信最好是在传递给 FreeMarker 的 Writer 中执行此操作。在大多数应用程序中,这些开销根本无关紧要。

避免运行时开销的另一个选项是在包装另一个 TemplateLoader 的自定义 TemplateLoader 中做同样的事情。然而,此类解决方案的问题是换行符有时来自模板外部(即来自数据模型),我认为用户也希望这些换行符也被规范化。

因此,即使它是 FreeMarker 的核心功能(我猜它可能是),它也可能会即时执行此操作,就像您可以使用自定义 Writer.