【发布时间】:2021-11-27 05:05:55
【问题描述】:
我想在我的 Spring Boot 应用中使用 freemarker。模板将从数据库或文件中加载,但我如何将它与 SpringTemplateLoader 一起使用?据我了解,总是期望文件位于磁盘上的某个位置,但在我的情况下,它可以从不同的来源加载。
这是我的测试用例
File testPdf = getResourceFile("template/test.ftl");
assertThat(testPdf.exists()).isTrue();
Map<String, String> model = new HashMap<>();
model.put("firstName", "Dave");
model.put("lastName", "Grohl");
String replacedString = FreeMarkerUtil.getContentFromTemplate(Files.readAllBytes(testPdf.toPath()) , model);
assertThat(replacedString).isEqualTo(expectedReplacedString);
我正在尝试使用需要 Resourceloader 和 templateLoaderPath 的 SpringTemplateLoader,但我没有路径,我希望从 byte[] 加载模板
public static String getContentFromTemplate(byte[] template, Map<String, String> model){
ByteArrayResource templateResource = new ByteArrayResource(template);
SpringTemplateLoader loader = new SpringTemplateLoader(templateResource, )
}
或者我需要将 ftl 存储在磁盘上并在 FreeMarker 的配置中配置此路径?
【问题讨论】:
-
那么不要使用
SpringTemplateLoader。编写您自己的TemplateLoader实例,从数据库中检索它们。然后扩展FreemarkerConfigurer(覆盖postProcessTemplateLoaders方法)并将这个专门的模板加载器添加到加载器列表中。 -
谢谢,我会试试这个。也许您在网络上有示例或类似的东西?
-
您需要为您支持的所有不同位置提供
TemplateLoader(文件支持开箱即用,因此不应该成为问题)。 -
如果我将文件存储在配置的目标中,然后使用 SpringTemplateLoader 的默认行为怎么办?那么它也应该工作?
-
是的,因为它可以解析文件。
标签: java spring-boot freemarker