spring Boot默认就是使用thymeleaf模板引擎的,这里我们把它换掉,用freemarker作为我们前台页面模板引擎。
1.Maven依赖
Spring Boot同样提供了集成freemarker的starter,引入即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.配置
这里我们采用Java Config的形式进行配置。
新建MvcConfigurer类,继承自WebMvcConfigurerAdapter类
自定义viewResolver方法,返回FreeMarkerViewResolver。
自定义freemarkerConfig方法,通过FreeMarkerConfigurationFactory工厂类进行freemarker的默认配置,主要配置setTemplateLoaderPaths的模板根路径,这里需要注意的是,freemarker对null值是报错处理的,这里我们通过
freemarker.template.Configuration configuration = factory.createConfiguration();
configuration.setClassicCompatible(true);
result.setConfiguration(configuration);
几行代码将null值做空处理,防止页面报错。
实现addResourceHandlers方法,添加静态资源映射,否则页面引入静态资源会报404.
/**
*mvc 配置
* 增加freemarker集成
*/
@Configuration
public class MvcConfigurer extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(true);
resolver.setPrefix("");
resolver.setSuffix(".ftl");
resolver.setContentType("text/html; charset=UTF-8");
return resolver;
}
@Bean
public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
factory.setTemplateLoaderPaths("classpath:templates", "src/main/resources/templates");
factory.setDefaultEncoding("UTF-8");
FreeMarkerConfigurer result = new FreeMarkerConfigurer();
/**
* 配置freemarker对NULL值处理,替换成空字符串
*/
freemarker.template.Configuration configuration = factory.createConfiguration();
configuration.setClassicCompatible(true);
result.setConfiguration(configuration);
return result;
}
/**
* 增加静态资源映射,classpath:/static
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}