Spring Boot控制器没有返回html页面

时间:2017-07-14 21:22:50

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

我在弹簧启动时遇到控制器问题。哪个应该返回一个index.html文件,但它正在做什么,返回字符串" index"。

以下是您要查找的内容,

的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>com.earworm</groupId>
    <artifactId>earworm</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project> 

名为LoginController.java的控制器

package com.earwormproject.earwormcontrollers;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class LoginController {

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

    @RequestMapping(value = "/profile", method = RequestMethod.GET)
    @ResponseBody
    public String addDataToLoginForm() {
        return "profile";
    }
}

这是主要的课程,

package com.earwormproject;

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

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

文件结构

enter image description here

Earworm是主要的类。到目前为止,我知道控制器检查src/main/resources/templates中的html模板,我已将index.html放入模板中,但无效。

当我转到http://localhost:8080/index时,它会向我显示字符串index,而不是index.html页面。像这样,

enter image description here

我已经在SO中经历了几乎所有类似的问题,尝试了所有这些但在这种情况下不起作用。一些线索将有很大帮助。谢谢。

6 个答案:

答案 0 :(得分:1)

从您的控制器中删除响应正文,然后再试一次。

答案 1 :(得分:1)

在标题中设置内容类型,删除注释@ResponseBody并更改&#34;索引&#34;到&#34; index.html&#34;

(keyup.numbers)="foo()"

静态资源的类路径(来自模板的文件)也必须位于以下位置:/ static或/ public或/ resources或/ META-INF / resources 因为只有这个位置弹簧知道默认绑定

答案 2 :(得分:1)

我遇到了同样的问题,但我的问题是JDK9。当我尝试使用JDK1.8时,一切都变得很好。

答案 3 :(得分:0)

解决此问题的三个步骤
1.在返回HTML文件时,删除@RequestBody批注。
2.从maven存储库中添加一个与您正在使用的tomcat服务器相对应的依赖项。
https://mvnrepository.com/artifact/org.apache.tomcat/tomcat-jasper
3.关闭所有html标签。 Thymleaf希望html文件是有效的xml文件。

答案 4 :(得分:0)

@ResponseBody不是返回视图。您可以将其用于API。

答案 5 :(得分:0)

我有同样的问题。仅通过返回带有html文件名的String便无法返回html。对我来说,它只能在ModelAndView下使用:

@RequestMapping("/")
public ModelAndView index () {
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.setViewName("index");
    return modelAndView;
}

有人说这种问题是因为jdk版本而发生的。我使用的是jdk14。