如何使用 FreeMarkerConfigurer 配置带有 spring-boot 的 freemarker?
How to configure freemarker with spring-boot with FreeMarkerConfigurer?
我在 spring 启动时配置 freemarker 有问题。
我的应用程序中有下一个代码 class.
@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
当我在我的本地机器上构建和 运行 应用程序时一切正常,但是当我尝试 运行 相同的 .jar 在 linux 服务器或 Docker(官方 spring docker)我的应用程序在尝试使用下一个错误渲染视图时崩溃:
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";
}
您需要确保 FreemarkerConfigurer 知道您的模板位置。首先,我看到您将方法称为 "setTemplateLoaderPath("template")",但是,该文件夹称为 "templates"(复数)。
其次,我认为文件夹路径是相对于您的程序 运行 所在位置(又名工作目录)的,它可以从 IDE 更改为另一个。最好的选择是将模板放在资源文件夹中。这样它们就被打包在 Jar 中,然后它们可以作为类路径资源被引用,无论您 运行 您的程序在哪里(作为可执行 JAR、docker 图像或通过 IDE).
您可以查看这篇文章以获取设置 freemarkerconfigurer 的示例 https://nullbeans.com/spring-boot-freemarker-configuration-example/
我在 spring 启动时配置 freemarker 有问题。 我的应用程序中有下一个代码 class.
@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
当我在我的本地机器上构建和 运行 应用程序时一切正常,但是当我尝试 运行 相同的 .jar 在 linux 服务器或 Docker(官方 spring docker)我的应用程序在尝试使用下一个错误渲染视图时崩溃:
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";
}
您需要确保 FreemarkerConfigurer 知道您的模板位置。首先,我看到您将方法称为 "setTemplateLoaderPath("template")",但是,该文件夹称为 "templates"(复数)。
其次,我认为文件夹路径是相对于您的程序 运行 所在位置(又名工作目录)的,它可以从 IDE 更改为另一个。最好的选择是将模板放在资源文件夹中。这样它们就被打包在 Jar 中,然后它们可以作为类路径资源被引用,无论您 运行 您的程序在哪里(作为可执行 JAR、docker 图像或通过 IDE).
您可以查看这篇文章以获取设置 freemarkerconfigurer 的示例 https://nullbeans.com/spring-boot-freemarker-configuration-example/