jtwig-spring-boot-starter ,Defining prefix/suffix of the resolver,resource not found
代码地址:码云
最近接触到Jtwig模板引擎,遇到一个问题。想设置自己的 viewResolver,
设置之前我们先看看Jtwig源码中默认的 viewResolver的prefix/suffix配置。
如上图,在jtwig-spring-boot-starter默认prefix为classpath:/templates/。
注意!在springboot的项目中,classpath是指项目编译后的classes文件夹。
如下图为项目结构:
如下 为配置文件JtwigConfig.java:
@Configuration
public class JtwigConfig implements JtwigViewResolverConfigurer {
@Override
public void configure(JtwigViewResolver viewResolver) {
viewResolver.setPrefix("classpath:/WEB-INF/templates/");
viewResolver.setSuffix(".twig.html");
viewResolver.setRenderer(new JtwigRenderer(EnvironmentConfigurationBuilder
.configuration()
.extensions().add(new MyExtension()).and()
.build()));
}
private static class MyExtension implements Extension {
@Override
public void configure(EnvironmentConfigurationBuilder configurationBuilder) {
}
}
}
但发现总是报错,“Resource ‘/WEB-INF/templates/index/index.twig.html’ not found”。
原因是 springboot默认不会编译和打包webapp中的文件,所以编译之后的文件夹classes中根本没有 “WEB-INF/..”文件夹。
因此需要在pom.xml中加入如下配置:
<build>
<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-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<resources>
<!-- 打包时将web文件拷贝到classes目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>${project.build.directory}/classes</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
此时编译之后的文件夹目录如下图:
此时运行项目就不会报错了。
代码地址:码云