繁体   English   中英

Spring 引导 Freemarker 从 2.2.0 升级失败

[英]Spring Boot Freemarker fails from 2.2.0 upgrade

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

我有一个@Controller服务/hellosrc/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). .

错误堆栈跟踪并没有说太多。 它只是说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 之前,它工作得非常好
这里有什么问题?

  • 这是一个按照规则自我回答的问题,以防止其他可怜的灵魂像我一样遭受痛苦。

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

可以在此处找到更改此内容的提交。 它旨在解决这个问题,freemarker 默认设置应该更安全,即启用自动 HTML 转义。

您可以在此处找到升级前应阅读的2.2.0.RELEASE的完整变更日志。

我也花了一天时间试图弄清楚这一点。 想知道为什么在遵循代码示例时代码不起作用。

它在我降级到 Spring Boot 2.1.9 后才起作用,并且仅在搜索与 2.2.0 相关的问题时才找到此答案。

如果 Spring 至少检查并在发生这样的重大变化时抛出有意义的异常或警告,那就太好了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM