问题提出

一个SpringBoot项目中,用到了freemarker,如下:
01 用到了ModelAndView.png

用到了ModelAndView,这个数据结构长这个样子:
02 ModelAndView.png

model中存放着返回的Map<>数据。

这是我想返回的视图模板,存放在templates目录下面:
03 视图模板内容很简单.png

但是,运行之后访问这个接口,response报错提示:
04 原报错提示.png

05 报错提示翻译成中文.png

问题探索

首先要了解freemarker的概念:freemarker简介

1.查看是否引入依赖,依赖引入是否正确

有两个依赖,一个叫freemarker,一个叫spring-boot-starter-freemarker,根据项目是否为SpringBoot项目来引入。博主的项目是spring-boot-starter-freemarker,却引入了freemarker,因此排查了好久。

freemarker的依赖:

<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
</dependency>

spring-boot-starter-freemarker的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

可以前往Maven Repository,搜索freemarker,了解更详细的情况:Maven Repository

06 freemarker检索结果.png

2. 查看模板的后缀名和SpringBoot的版本

本条问题解决方案来源:SpringBoot2.2.X用Freemarker出现404

SpringBoot在2.2.X中,已经把原先默认的后缀名.ftl改成了.ftlh,如果想继续保持以前的.ftl后缀名,需要在配置文件application.yml中配置一下(或application.properties,修改一下排版格式):

spring:
  freemarker:
    suffix: .ftl

JellyfishMIX
34 声望2 粉丝

coder