当前位置: 首页 > 知识库问答 >
问题:

使用Thymeleaf加载Spring启动模板时出错

程鸿畅
2023-03-14

我有一个springBoot应用程序,它使用Thymeleaf渲染模板。当我从Eclipse运行应用程序时,所有这些都可以完美地工作。但是,当我尝试构建并运行jar时,有一个模板拒绝加载,出现以下异常:

异常处理模板“/XXX/form/importConfiguration”:错误解析模板“/XXX/form/importConfiguration”,模板可能不存在或无法由任何已配置的模板解析程序访问

控制器代码非常简单:

@Controller
public class ImportConfigurationsController extends BaseController
{
   private static final Logger log = LoggerFactory.getLogger(ImportConfigurationsController.class);

   private static final String PATH_IMPORT_CONFIG = "/XXX/importConfigurations";
   private static final String PATH_INIT_IMPORT_CONFIG = "/XXX/initLoadingXMLConfiguration";
   private static final String PATH_IMPORT_CONFIG_FROM_XML = "/XXX/importConfigurationFromXML";
   private static final String TEMPLATE_IMPORT_CONFIG = "/XXX/form/importConfiguration";

   /**
    * Loads the import configuration page
    * 
    * @param model
    * @return
    * @throws Exception
    */
   @GetMapping(PATH_IMPORT_CONFIG)
   public String importConfiguration(Model model) throws Exception
   {
      log.trace("Enter Method importConfiguration. Params: {}", model);

      log.trace("Return Method importConfiguration.");
      return TEMPLATE_IMPORT_CONFIG;
   }

我检查了jar文件,html文件确实存在。此外,除此之外的所有其他模板都正常运行。有人能帮我吗?

编辑:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>XXXX</groupId>
    <artifactId>XXXX</artifactId>
    <version>1.7</version>

    <properties>
        <jar.filename>XXXX-${version}</jar.filename>

        <java.version>1.7</java.version>
        <commons.lang3-version>3.1</commons.lang3-version>
        <mybatis-version>3.4.1</mybatis-version>
        <ojdbc-version>11.2.0.4</ojdbc-version>
        <guava-version>19.0</guava-version>
        <commons-configuration-version>1.6</commons-configuration-version>
        <commons-jxpath-version>1.3</commons-jxpath-version>
        <javax-version>2.1</javax-version>

        <project.branch>trunk</project.branch>
        <deploy.dir>${project.basedir}/deploy</deploy.dir>
        <dist.dir>${deploy.dir}/XXXX/${project.branch}</dist.dir>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
    </parent>

    <build>
        <finalName>${jar.filename}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <!-- Run: runs Ant tasks for Maven -->
                        <id>copy-extra-files</id>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <!-- Ant targets to be executed -->
                            <target name="build-distribution">
                                <echo message="Deleting ${dist.dir} folder" />
                                <delete dir="${dist.dir}" />

                                <echo message="Copying application scripts to ${dist.dir} folder" />
                                <copy todir="${dist.dir}/application">
                                    <fileset dir="scripts" />
                                </copy>

                                <echo message="Copying SQL scripts to ${dist.dir}/sql folder" />
                                <copy todir="${dist.dir}/sql">
                                    <fileset dir="sql" />
                                </copy>

                                <echo message="Copying config to ${dist.dir}/config folder" />
                                <copy todir="${dist.dir}/application/config">
                                    <fileset dir="src/main/resources"
                                        includes="application.properties, messages.properties, log4j2.xml" />
                                </copy>

                                <echo message="Copying application's packaged jar file" />
                                <copy todir="${dist.dir}/application" verbose="true">
                                    <fileset file="target/${jar.filename}.jar" />
                                </copy>
                            </target>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-extra-files</id>
                        <phase>none</phase>
                    </execution>
                </executions>
                <inherited>false</inherited>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-el</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons.lang3-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>${ojdbc-version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis-version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava-version}</version>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${javax-version}</version>
        </dependency>
        <dependency>
            <groupId>commons-configuration</groupId>
            <artifactId>commons-configuration</artifactId>
            <version>${commons-configuration-version}</version>
        </dependency>
        <dependency>
            <groupId>commons-jxpath</groupId>
            <artifactId>commons-jxpath</artifactId>
            <version>${commons-jxpath-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
    </dependencies>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

更新:

控制器本身似乎有问题。当我尝试返回控制器中另一个模板的名称时,它在另一个控制器中加载得非常好,我得到了相同的异常。因此,出于某种原因,Thymeleaf似乎无法从该控制器加载模板。

共有1个答案

步建茗
2023-03-14

对不起,浪费了大家的时间。和往常一样,我有这个问题的原因非常简单。在创建新控制器时,我们似乎看到模板路径中有一个前导“/”。因此,路径不是“XXX/path/to/file”,而是“/XXX/path/to.file”
添加此内容是为了让可能遇到此问题的其他人受益事后想一想,我认为应该在某个地方强调这一点,因为错误消息远非描述性的。前导“/”不应停止加载模板,如果是这样,错误至少应给出出错原因的指示。

 类似资料:
  • 正如标题所说,在尝试访问localhost:8080时,我得到了白标签404错误页面。 主要类: pom.xml: 控制器: 应用特性: 向学生展示。html: 项目结构: 我试过看很多不同的教程,还有一些类似这样的帖子:SpringBoot和Thymeleaf:找不到HTML模板 我最初尝试使用JSP,但我也无法让它们工作。我觉得我的头在这一点上撞到了墙上,我不知道还能做什么。这是我第一次尝试使

  • 当我更改驻留在/templates中的thymeleaf.html文件时,我希望浏览器自动重新加载页面。我已经安装了live reload插件,它能够与Spring Boot服务器进行握手。但是,在修改thymeleaf模板文件时,我必须手动重新加载浏览器。我可能错过了什么。显然,我启用了,并且还手动更新了属性。spring devtools正确地将更改转发到构建目标中的任何模板或控制器,并且通过

  • 我正在努力学习这个教程http://www.thymeleaf.org/doc/articles/springmvcaccessdata.html了解如何向Thymeleaf模板发送响应。但我得到了这个错误:找不到模板位置:classpath:/templates/(请添加一些模板或检查您的Thymeleaf配置) 我把信息。html文件位于其他源目录中,位于

  • 如何让Spring Boot和Thymeleaf在浏览器访问时自动查找和映射要处理的模板文件? 包含和返回

  • 我遇到了一个关于堆栈溢出的错误,我已经见过多次了,但是没有一个解决方案适合我。 基本上,我使用Thymeleaf 3运行Spring Boot 4,当我使用进行本地测试时,我的模板加载很好/格雷德卢·布特伦。 但是,当我打包jar并尝试运行它时,当我访问endpoint时,总是会出现以下错误: 我的模板都位于src/main/resources/templates/下,并且是以结尾的文件。html

  • 我正在尝试使用spring应用程序的Thymeleaf模板发送邮件,我在这里引用https://github.com/Thymeleaf/thymeleafexamples-springmail/ 我没有得到任何错误,但它仍然不工作...我使用相同的代码给在github仍然没有运气...谁能建议如何做到这一点?? 下面是用来发送邮件的方法。 如果我删除使用thymeleaf创建html正文的行,并