如何在Spring应用程序中返回get方法上的html?

时间:2018-02-17 18:43:37

标签: spring-mvc spring-boot

我有一个非常轻松的问题,我已经使用了Spring mvc + jsp,但现在我无法理解控制器为什么不返回html文件。现在我将Spring Boot与Web模块一起使用。

@Controller
@RequestMapping(value = "/test")
public class Main {
    private static final Logger logger = Logger
            .getLogger(Main.class.getName());

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String index() {
        return "templates/hello.html";
    }

我的html文件:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>HelloWorld</title>
</head>
  <body>
  HELLO
  </body>
</html>

我总是得到错误:

  

Whitelabel错误页面   此应用程序没有/ error的显式映射,因此您将此视为回退。   2月17日星期六20:22:24 EET 2018年   出现意外错误(type = Not Found,status = 404)。   没有可用的消息

构建文件:

buildscript {
    ext {
        springBootVersion = '1.5.10.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

group = 'mikhailov.diplom.ae'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    // https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf
    compile group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.9.RELEASE'

}

1 个答案:

答案 0 :(得分:-1)

从您的构建文件开始,您使用的是thymeleaf:

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-web')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    // https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf
    compile group: 'org.thymeleaf', name: 'thymeleaf', version: '3.0.9.RELEASE'

} 

这种方法的“问题”是你必须明确定义百万美元的templateResolver bean和templateEngine。

另一方面,spring-boot附带一个开箱即用的解决方案,即

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

具有传统配置的所有内容。在这种情况下,您不需要定义templeteResolver或templateEngine(除非您真的不需要),只需返回具有正确名称的String即可开始使用模板。

使用spring依赖项,只需从返回的字符串中删除“templates”前缀和.html ext,它将按预期工作:

@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String index() {
    return "hello";
}