代码之家  ›  专栏  ›  技术社区  ›  yeo4

Spring引导返回字符串而不是.html文件

  •  0
  • yeo4  · 技术社区  · 7 年前

    我尝试运行Spring引导应用程序,它将返回静态文件夹上的HTML静态文件, 问题是:每次加载页面:127.0.0.1时,我都会得到字符串“bakara”,而不是html文件bakara.html。 当我加载127.0.0.1/bakara.html时,我得到bakara.html文件

    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>il.mda.ks</groupId>
    <artifactId>mdaForm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>mdaForm</name>
    <description>Demo project for Spring Boot</description>
    
    
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    
    
    <dependencies>
        <!-- This is a web application -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <!-- Tomcat embedded container -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    
        <!-- JSTL for JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
    
        <!-- Need this to compile JSP -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    
        <!-- Need this to compile JSP, tomcat-embed-jasper version is not working, 
            no idea why -->
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.6.1</version>
            <scope>provided</scope>
        </dependency>
    
        <!-- Optional, test for static content, bootstrap CSS -->
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7</version>
        </dependency>
    
    </dependencies>
    

    应用程序属性:

    #spring.mvc.view.prefix=/static/
    #spring.mvc.view.suffix=.html
    
    spring.mvc.view.prefix=/static
    spring.mvc.view.suffix=.html
    

    家庭控制器.java:

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    @Controller
    public class HomeController {
    
        @RequestMapping("/")
        @ResponseBody
        public String welcome() {
            return "bakara";
        }
    }
    

    项目结构:

    |── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── il
    │   │   │       └── mda
    │   │   │           └── ks
    │   │   │               └── mdaForm
    │   │   │                   ├── BakaraController.java
    │   │   │                   ├── HomeController.java
    │   │   │                   └── MdaFormApplication.java
    │   │   └── resources
    │   │       ├── application.properties
    │   │       ├── static
    │   │       │   ├── assets
    │   │       │   ├── bakara.html
    │   │       │   ├── succeed.html
    │   │       │   └── TokenDenied.html
    │   │       └── templates
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   Shubham Dixit    7 年前

    默认情况下,Spring boot会在 templates 文件夹 static 文件夹用于其他文件,如 css and js 。尝试将HTML文件移到 src/main/resources/templates 文件夹并删除 @ResponseBody 从控制器方法中,并将其从应用程序属性中删除 spring.mvc.view.prefix=/static . 我希望它能奏效。

        2
  •  1
  •   Adina Rolea    7 年前

    使用注释时 @ResponseBody ,您实际上告诉Spring不要尝试查找带有返回名称的视图。如果需要HTML,只需从Controller方法中删除注释。

        3
  •  1
  •   G. Spyridakis    7 年前

    @Controller VS @RestController

    • @控制器 用于将类标记为Spring MVC控制器。
    • REST控制器 是一个只需添加 @控制器 @ResponseBody 注释。

    所以在你的情况下,只需移除 @责任书 注释来自 welcome() homecontroller.java中的方法应该足以获得所需的输出。

    还可以查看此弹簧指南,了解如何 Serve Web Content with Spring MVC