Spring Boot无法解析Freemarker视图

时间:2017-02-19 18:05:03

标签: java spring spring-mvc spring-boot freemarker

我试图首次使用Spring Boot显示Freemarker视图,并且当前在浏览器中出现以下错误:

  

Whitelabel错误页面

     

这个应用程序没有/ error的显式映射,所以你看到了   这是一个后备。

     

Sun Feb 19 17:59:07 GMT 2017出现意外错误(type = Not   找到了,状态= 404)。没有可用的消息

我正在使用Spring Boot 1.5。

我的文件结构:

enter image description here

的LoginController

package com.crm.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.crm.service.LoginService;

@Controller
public class LoginController {

    @Autowired
    private LoginService loginService;

    @RequestMapping("/login")
    public String authenticate() {
        return "loginPage";
    }
}

application.properties

spring.freemarker.template-loader-path: /
spring.freemarker.suffix: .ftl

服务器

package com.crm;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Server{

    public static void main(String[] args) {
        SpringApplication.run(Server.class, args);
    }
}

为什么Spring无法解析loginPage.ftl视图?为什么我不能在网络浏览器中看到它?

4 个答案:

答案 0 :(得分:11)

Spring Boot最近又一次引入了重大更改,这导致了臭名昭著的whitelabel error页面。他们将默认后缀从.ftl更改为.ftlh

https://github.com/spring-projects/spring-boot/issues/15131

因此对于Spring Boot 2.2.x应用程序,必须扩展这些扩展。

答案 1 :(得分:2)

application.properties内的freemarker模板目录设置错误。它应该是:

spring.freemarker.template-loader-path=classpath:/templates/

答案 2 :(得分:2)

使用Spring Boot 1.5.1,您不需要将这些属性添加到您的application.properties文件中,由于自动配置,它们已经定义了。

删除这两个属性,它应该与pom.xml中的以下依赖项一起使用:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

可以在此处找到文档:http://docs.spring.io/spring-boot/docs/1.5.1.RELEASE/reference/htmlsingle/#boot-features-spring-mvc-template-engines

答案 3 :(得分:0)

当我从控制器方法中将模板名称作为ModelAndView对象的构造函数参数(而不只是字符串)返回给我时,它开始为我工作。不知道为什么,但是我没有时间弄清楚这个问题,因此正在寻找快速解决方案。如果有人愿意解释,请这样做。

带有Freemarker的Spring Boot 2.0.2.RELEASE。这是application.properties的内容:

spring.freemarker.enabled=true
spring.freemarker.template-loader-path=classpath:/templates