Spring Boot Freemarker从2.2.0升级失败

时间:2019-10-24 11:38:37

标签: java spring spring-boot kotlin freemarker

在将spring-boot-parent升级到2.2.0.RELEASE时,基于Freemarker的Spring Boot Web应用程序无法正确处理请求。

我有一个@Controller/hello一起为src/main/resources/templates/hello.ftl服务。

@Controller
class HelloController() {
    @RequestMapping(value = ["/hello"])
    fun hello(): String {
        return "hello"
    }
}

根据请求,它仅显示在错误页面上,提示There was an unexpected error (type=Not Found, status=404).

错误stacktrace的说明不多。它只是说org.springframework.web.servlet.resource.ResourceHttpRequestHandler: Resource not found

我的pom.xml基本上如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
</dependencies>

在升级到Spring Boot 2.2.0.RELEASE 之前一直工作得很好。
这是什么问题?

  • 根据rules,这是一个自我解答的问题,目的是防止其他可怜的人像我一样遭受苦难。

1 个答案:

答案 0 :(得分:4)

这是由于Spring Boot 2.2.0中的一项重大更改,带有默认的freemarker后缀。
Freemarker文件现在应以.ftlh结尾,而不是.ftl
.ftlh启用HTML自动转义功能。

可以更改here的提交已更改。它旨在修复this issue,使freemarker的默认设置更加安全,从而启用自动HTML转义。

可以找到here。在升级之前,您应该阅读2.2.0.RELEASE的完整变更日志。