Spring Boot使用jar文件运行时出现thymeleaf错误

Moh*_*ian 1 spring spring-mvc thymeleaf spring-boot

这个问题之前已经被问过,但我没有解决我的问题,而且我得到了一些奇怪的功能。

\n\n

如果我将 index.html 文件放在资源下的模板目录中,如下所示:

\n\n
\xe2\x94\x9c\xe2\x94\x80 src\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80 main\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x9c\xe2\x94\x80 java\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94 com\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94 pic\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94 name\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c config\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c controller\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c domain\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c dto\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c error\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c formatter\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c repository\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x9c service\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x82\xc2\xa0\xc2\xa0             \xe2\x94\x94 utils\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0\xe2\x94\x94 resources\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x9c static\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c css\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c fonts\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c images\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94 js\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0  \xe2\x94\x94 templates\n\xe2\x94\x82   \xe2\x94\x82      \xe2\x94\x9c index.html  \n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0    \xe2\x94\x9c admin\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0    \xe2\x94\x9c error\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0    \xe2\x94\x94 fragments\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是 pom 文件:

\n\n
<parent>\n    <groupId>org.springframework.boot</groupId>\n    <artifactId>spring-boot-starter-parent</artifactId>\n    <version>2.0.3.RELEASE</version>\n</parent>\n\n<dependencies>\n    <dependency>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-web</artifactId>\n    </dependency>\n    <dependency>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-starter-thymeleaf</artifactId>\n    </dependency>\n    <dependency>\n        <groupId>org.springframework.boot</groupId>\n        <artifactId>spring-boot-devtools</artifactId>\n        <optional>true</optional>\n    </dependency>\n</dependencies>\n\n<properties>\n    <java.version>1.8</java.version>\n</properties>\n\n\n<build>\n    <plugins>\n        <plugin>\n            <groupId>org.springframework.boot</groupId>\n            <artifactId>spring-boot-maven-plugin</artifactId>\n        </plugin>\n    </plugins>\n</build>\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我在 idea 中执行 proj 时没有问题。但是当执行 jar 时,返回此错误:\norg.thymeleaf.exceptions.TemplateInputException:解析模板“/index”时出错,模板可能不存在或可能无法被任何配置的模板解析器访问

\n

Raj*_*gan 5

问题出/在访问视图时前面的斜杠。这就是原因。

当您从 IDE 运行应用程序时,类和资源不会打包为 JAR。这意味着文件系统在加载和维护路径解析以及所有资源的内容方面完成了大部分工作。因此,类路径资源的名称classpath*:/templates/index.html和名称classpath*:/templates//index.html是相同的。

然而,一旦它被打包为 spring boot JAR 文件,Spring Boot ClassLoader 就有责任从压缩的 JAR 文件中加载类和资源。不幸的是,这个并没有被double slashes视为single slash.

为避免出现此问题,请删除视图名称中的斜杠前缀。

还有一个针对 spring-boot 项目的错误条目。