如何使用FreeMarkerConfigurer使用spring-boot配置freemarker?

时间:2017-07-20 21:26:56

标签: java spring spring-mvc spring-boot freemarker

我在spring boot中配置freemarker时遇到问题。 我的应用程序类中有下一个代码。

    @Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
    FreeMarkerConfigurer freemarkerConfig = new FreeMarkerConfigurer();
    freemarkerConfig.setTemplateLoaderPath("template");
    freemarkerConfig.setDefaultEncoding("UTF-8");

    Map<String, Object> freemarkerVariables = new HashMap<String, Object>();
    freemarkerVariables.put("layout", freemarkerLayoutDirectives());

    freemarkerConfig.setFreemarkerVariables(freemarkerVariables);
    return freemarkerConfig;
}


@Bean
public ViewResolver viewResolver() {
    FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
    viewResolver.setCache(false);
    viewResolver.setPrefix("");
    viewResolver.setSuffix(".ftl");
    viewResolver.setContentType("text/html; charset=utf-8");
    return viewResolver;
}


@Bean
public Map<String, TemplateModel> freemarkerLayoutDirectives() {
    Map<String, TemplateModel> freemarkerLayoutDirectives = new HashMap<String, TemplateModel>();
    freemarkerLayoutDirectives.put("extends", new ExtendsDirective());
    freemarkerLayoutDirectives.put("block", new BlockDirective());
    freemarkerLayoutDirectives.put("put", new PutDirective());

    return freemarkerLayoutDirectives;
}

我使用此代码配置freemarker和freemarkerLayoutDirectives(inheratance)

我的模板放在

src/main/webapp/templates

当我在我的本地计算机上构建和运行应用程序时,所有工作都很好,但是当我尝试在linux服务器或Docker(oficial spring docker)上运行相同的.jar时,我的应用程序在尝试渲染视图机智时崩溃了:< / p>

There was an unexpected error (type=Not Found, status=404).

无可用信息

我的控制器代码

    @RequestMapping(path = "/", method = {RequestMethod.GET})
public String homePage(Model model) String name,
                       BindingResult errors
) {

    return "index";
}

1 个答案:

答案 0 :(得分:2)

您需要确保FreemarkerConfigurer知道模板的位置。首先,我看到您将方法称为“ setTemplateLoaderPath(“ template”)“,但是该文件夹称为“ templates”(复数)。

第二,我认为文件夹路径是相对于您的程序在哪里运行的(即工作目录),它可以从一个IDE更改为另一个目录。最好的选择是将模板放在资源文件夹中。这样,它们便被打包在Jar中,无论您在何处运行程序(作为可执行JAR,docker映像或通过IDE),它们都可以被称为类路径资源。

您可以查看本文以获取设置freemarkerconfigurer https://nullbeans.com/spring-boot-freemarker-configuration-example/

的示例。