【问题标题】:How to configure freemarker with spring-boot with FreeMarkerConfigurer?如何使用 FreeMarkerConfigurer 使用 spring-boot 配置 freemarker?
【发布时间】:2017-12-26 18:53:22
【问题描述】:

我在 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(继承)

我的模板放置在

src/main/webapp/templates

当我在本地机器上构建和运行应用程序时一切正常,但是当我尝试在 linux 服务器或 Docker(官方 spring docker)上运行相同的 .jar 时,我的应用程序在尝试下一个错误的渲染视图时崩溃:

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";
}

【问题讨论】:

  • 您实际上是在本地机器上运行 jar 文件,还是只是从 IDE 启动应用程序?最后一种情况,检查jar文件是否包含webapp资源?
  • 可能与:stackoverflow.com/questions/35968479/…有关。也就是说,除非您将应用程序部署为“战争”文件,否则请使用纯类路径资源,而不是 src/main/webapp/templates

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


【解决方案1】:

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

其次,我认为文件夹路径与程序运行的位置(也称为工作目录)相关,它可以从一个 IDE 更改为另一个。您最好的选择是将模板放在资源文件夹中。这样它们就被打包在 Jar 中,然后可以作为类路径资源引用,无论您在哪里运行程序(作为可执行 JAR、docker 映像或通过 IDE)。

您可以查看这篇文章以获取设置 freemarkerconfigurer https://nullbeans.com/spring-boot-freemarker-configuration-example/ 的示例

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 2016-07-04
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2017-05-17
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多