我在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";
}
答案 0 :(得分:2)
您需要确保FreemarkerConfigurer知道模板的位置。首先,我看到您将方法称为“ setTemplateLoaderPath(“ template”)“,但是该文件夹称为“ templates”(复数)。
第二,我认为文件夹路径是相对于您的程序在哪里运行的(即工作目录),它可以从一个IDE更改为另一个目录。最好的选择是将模板放在资源文件夹中。这样,它们便被打包在Jar中,无论您在何处运行程序(作为可执行JAR,docker映像或通过IDE),它们都可以被称为类路径资源。
您可以查看本文以获取设置freemarkerconfigurer https://nullbeans.com/spring-boot-freemarker-configuration-example/
的示例。