在将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 之前一直工作得很好。
这是什么问题?
答案 0 :(得分:4)
这是由于Spring Boot 2.2.0中的一项重大更改,带有默认的freemarker后缀。
Freemarker文件现在应以.ftlh
结尾,而不是.ftl
。
.ftlh
启用HTML自动转义功能。
可以更改here的提交已更改。它旨在修复this issue,使freemarker的默认设置更加安全,从而启用自动HTML转义。
可以找到here。在升级之前,您应该阅读2.2.0.RELEASE
的完整变更日志。