簡體   English   中英

Spring Boot FreeMarker:如何即時使用自定義模板?

[英]Spring Boot FreeMarker: How to use custom template on the fly?

我想在我的 spring 啟動應用程序中使用 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 的 Configuration 中配置此路徑?

FreeMarker 不假定文件來自文件。 從哪里加載模板取決於TemplateLoader實現。 因此,您可能希望配置 FreeMarker 以使用您自己的實現。

請注意,也可以使用Template構造函數直接從String創建模板。 在某些應用程序中,這是最簡單的解決方案。 這樣做的缺點是不能通過名稱從其他模板引用此類模板(例如通過#import#include )。 顯然,對於此類Template對象,FreeMarker 不會為您進行緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM