- 2023-01-26 10:26:43
- 995 热度
- 0 评论
Spring Boot2.2.0 这个版本发布没多久,Spring Boot2.2.1 就出来,看似不太重要的版本,却发生了一个小小变化,导致不少小伙伴掉坑了,我本来也没太在意,但是最近有快十个小伙伴在微信上问这个问题,看来我必须得写篇文章说下了,防止小伙伴们掉坑了。
到底是什么问题呢?其实就是 Freemarker 后缀变化的问题,一开始收到这个问题的时候,我以为就是小伙伴们学习不认真导致的,也没太在意:
结果最近不停有人掉坑,我觉得很有必要给各位小伙伴提个醒。
很多小伙伴可能很早就接触过 Freemarker,这个模板在 SSM 中也可以使用,只不过需要我们自己的配置东西稍微有点多。但是在之前我们使用 Freemarker 时,这个模板文件的后缀是 ftl,所以我们理所当然的认为这是标准后缀。
其实不然。
在 Freemarker 中,还有两个后缀,一个叫做 ftlh,这个用在 HTML 模板中,另一个叫做 ftlx,这个用在 XML 模板中。
Spring Boot2.2.0 之前,Freemarker 模板默认采用的后缀就是 ftl,我们可以看下 FreeMarkerProperties 类的部分源码(Spring Boot2.2.0 之前的版本):
1 |
@ConfigurationProperties( |
可以看到,DEFAULT_SUFFIX 变量中定义的 Freemarker 默认的后缀还是 .ftl
。
从 Spring Boot2.2.0 开始,FreeMarkerProperties 文件内容就发生了变化,最新的 FreeMarkerProperties 文件部分源码如下:
1 |
@ConfigurationProperties( |
可以看到,这个时候在 DEFAULT_SUFFIX 变量中定义的默认后缀变成 .ftlh
了。
就这样一个小小变化,就把很多初次接触 Spring Boot 的小伙伴搞晕啦。
那么这个问题如何解决呢?当大家发现了原因,应该也就能找到解决办法了,其实很简单,两个思路:
- 将 Freemarker 模板的后缀改为
.ftlh
,推荐这种方式 - 在 application.properties 中修改默认配置
第一种方案,就是我们在定义 Freemarker 模板的时候,直接将原来的 ftl 改成 ftlh 就可以了,像下面这张图这样:
这样框架就能找到相应的模板文件了。
第二种方案就是 Freemarker 模板的后缀不变,依然是 ftl
,然后我们在 application.properties 中修改默认的后缀配置,如下:
1 |
spring.freemarker.suffix=.ftl |
这样就是人为强行把 Freemarker 模板的后缀又改回 .ftl
了。
这两种方案都可以解决这个问题。
其实这个问题很简单,只要你看了 FreeMarkerProperties 类的源码,这个问题一下就明了了。
無名刚开始录 Spring Boot 视频的时候,当时最新版是 2.1.6,后来随着视频录制,Spring Boot 版本一直在变化,视频里一直是跟随最新版录制,不过在讲 Freemarker 这块的时候,还是 2.1.6,所以当时还不存在上面这个问题。虽然问题不存在,但是我在视频中却是带领小伙伴们看了 FreeMarkerProperties 类的源码的,出了问题之后,有小伙伴就机智的去翻这个类的源码,然后自己顺利的把问题解决了。感觉深得無名真传,吾心甚慰。
好了,一个小小的坑,小伙伴们在这里遇到问题稍稍留意下就可以了。
- Spring(403)
- Boot(208)
- Spring Boot(187)
- Java(82)
- Cloud(82)
- Spring Cloud(82)
- Security(60)
- Spring Security(54)
- Boot2(51)
- Spring Boot2(51)
- Redis(31)
- SQL(29)
- Mysql(25)
- IDE(24)
- Dalston(24)
- IDEA(22)
- mongoDB(22)
- MVC(22)
- JDBC(22)
- Web(21)
- CLI(20)
- Alibaba(19)
- SpringMVC(19)
- SpringBoot(17)
- Docker(17)
- Eclipse(16)
- Vue(16)
- Git(16)
- JPA(15)
- Apache(15)
- ORA(15)
- Oracle(14)
- jdk(14)
- Tomcat(14)
- Linux(14)
- HTTP(14)
- Mybatis(14)
- XML(13)
- JdbcTemplate(13)
- OAuth(13)
- Nacos(13)
- Pro(13)
- JSON(12)
- OAuth2(12)
- Data(12)
- int(11)
- Myeclipse(11)
- stream(11)
- not(10)
- Bug(10)
- maven(9)
- Map(9)
- Hystrix(9)
- ast(9)
- session(8)
- Window(8)
- Swagger(8)
- APP(8)
- Bit(8)
- API(8)
- JavaMail(7)
- Cache(7)
- File(7)
- IntelliJ(7)
- mail(7)
- windows(7)
- too(7)
- HTML(7)
- Github(7)
- Log4J(6)
- pushlet(6)
- apt(6)
- read(6)
- Freemarker(6)
- WebFlux(6)
- JSP(6)
- Bean(6)
- error(6)
- nginx(6)
- Server(6)
- ueditor(6)
- jar(6)
- ehcache(6)
- UDP(6)
- RabbitMQ(6)
- star(6)
- and(6)
- Excel(6)
- string(5)
- Syntaxhighlighter(5)
- script(5)
- Tool(5)
- Controller(5)
- swagger2(5)
- ldquo(5)
- input(5)
- Servlet(5)
- Config(5)
- discuz(5)
- Emlog(5)