使用@Controller |显示index.html页面春季启动

时间:2018-02-02 04:07:29

标签: html spring spring-mvc spring-boot

显示我创建的index.html网页时遇到问题。转到localhost:8080时我一直收到的输出是String值“index”而不是网页本身。 / templates目录的图像& localhost给出的结果可以在下面找到(超链接)

@Controller
public class IndexController {

        @RequestMapping("/")
        @ResponseBody
        public String index() {
            return "index";
        }
}

template_directory localhost:8080_result

4 个答案:

答案 0 :(得分:3)

从控制器方法addNewBooking(...)中删除@ResponseBody。使用@ResponseBody,您可以告诉Spring将方法的结果映射到HTTP响应主体,因此您的浏览器将其显示为纯文本(如果要使用Spring开发RESTful API,则需要这样做)。当您使用Spring MVC时,您希望返回一个视图,因此您不需要@ResponseBody

编辑1:我写的详细解释。

使用Spring Web,您有两种选择来编写您的应用:

  • 使用JSPsThymeleaf templatesFreemaker templates - >编写服务器端呈现的应用程序Spring MVC模式
  • 编写一个RESTful后端,例如单页应用程序(如ReactJs或Angular)从RESTful后端获取数据

对于选项1,您使用@Controller注释您的控制器,并提供几个端点,您的Spring应用程序将使用您的服务器端渲染器模板进行响应。您的所有控制器都会返回String,这是您要传输到浏览器的模板名称。 Spring会将String这个名称视为index并将返回,例如已呈现index.jsp到请求。示例可能如下所示:

@Controller
public class IndexController {

        @RequestMapping("/")
        public String index() {
            return "index";
        }
}

对于选项2,您使用@RestController @Controller@ResponseBody一起注释您的控制器(技术上@RestController只是@Controller的组合{1}}和`@ResponseBody)。使用此设置,您可以告诉Spring使用您的控制器方法返回类型并解析它,例如与杰克逊一起使用JSON并将其置于HTTP体内。如果您在浏览器中访问此类端点,则可以获得 对象的JSON表示。请看以下示例:

@RestController
public class IndexController {

        @RequestMapping("/persons")
        public List<Person> getPersons() {
            // ... some service calls/database access to get all persons
            return personList;
        }
} 

Person类:

public class Person {
   private String name;
   private int age;

   // getter and setter ...

}

如果您现在访问http://localhost:8080/persons,则可以获得以下输出:

[
  {
    "name": "John Doe",
    "age": 1337
  },
  {
    "name": "Peter Parker",
    "age": 12
  }
]

总结说明:如果要提供视图(服务器端呈现的HTML页面),则必须使用@Controller,并且控制器方法必须返回模板的名称。如果计划构建RESTful应用程序,请同时使用@RestController@Controller@ResponseBody的组合。

答案 1 :(得分:1)

与其他人提到的一样,您需要做的第一件事就是从控制器方法中删除has_many :somemodels ...注释。

其次,模板目录中的静态内容应移至
 @ResponseBodysrc/main/resources/static目录用于提供需要在服务器端呈现的内容(例如Thymeleaf)。

然后,您可以直接从控制器提供内容。

templates

答案 2 :(得分:1)

   @RequestMapping("/")
   @ResponseBody
    public String index() {
        return "index";
    }

删除@ResponseBody。

@RequestBody和@ResponseBody注释用于将HTTP请求/响应主体与方法参数或返回类型中的对象绑定。

@ResponseBody:Spring会将返回值绑定到传出的HTTP响应主体。

示例

     @RequestMapping(value    = "/checkuser",
                     method   = RequestMethod.GET,  
                     produces = MediaType.APPLICATION_JSON_VALUE )
     @ResponseBody
     public Boolean checkValidateUser(@RequestParam Map<String, String>  
          requestParams){
          String userName = requestParams.get("username");
          String password = requestParams.get("password");
     return 
   userBL.checkValidateUser(userName.trim().toUpperCase(),password.trim());
  }

src / main / resources / static / assets / images /中的图片  src / main / resources / templates中的Html页面

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "index.html";
    }
}

答案 3 :(得分:0)

如果您不像thyemleaf那样使用模板引擎,则必须将ui文件放入名为/src/main/resources/public/static的{​​{1}}的子文件夹中。您的/resources放入index.html

控制器:

/src/main/resources/public/index.html