显示我创建的index.html网页时遇到问题。转到localhost:8080时,我一直收到的输出是字符串值“index”,而不是网页本身。/templates目录的图像和本地主机提供的结果可以在下面找到(超链接)
@Controller
public class IndexController {
@RequestMapping("/")
@ResponseBody
public String index() {
return "index";
}
}
template_directory
localhost:8080_result
最佳答案
从 Controller 方法addNewBooking(...)中删除@ResponseBody
。使用@ResponseBody
,您告诉Spring将方法的结果映射到HTTP响应主体,以便浏览器将其显示为纯文本(如果要使用Spring开发RESTful API,则需要此文本)。在使用Spring MVC时,您想返回一个 View ,因此不需要@ResponseBody
。
编辑1:对我写的内容的详细说明。
使用Spring Web
,您可以选择两种方式来编写应用:
JSPs
,Thymeleaf templates
,Freemaker templates
-> Spring MVC
模式对于选择1,您可以使用
@Controller
注释 Controller ,并提供几个端点,您的Spring应用程序将使用这些端点响应服务器端渲染器模板。您的所有 Controller 都返回一个String
,它是您要传输到浏览器的模板的名称。 Spring将使用String
之类的index
名称,并返回例如呈现给请求的index.jsp
。一个示例可能如下所示:@Controller
public class IndexController {
@RequestMapping("/")
public String index() {
return "index";
}
}
对于选择2,您可以使用
@RestController
或注释您的 Controller ,同时将@Controller
和@ResponseBody
注释在一起(从技术上来说@RestController
只是@Controller
和`@ResponseBody的组合)。通过这种设置,您告诉Spring使用 Controller 方法的返回类型并对其进行解析,例如用Jackson转换为JSON,并将其放入HTTP正文中。如果您在浏览器中访问此类端点,则会得到对象的JSON表示形式。看下面的例子:
@RestController
public class IndexController {
@RequestMapping("/persons")
public List<Person> getPersons() {
// ... some service calls/database access to get all persons
return personList;
}
}
人员类:
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
}
]
总结一下解释:如果要提供Views(服务器端渲染的HTML页面),则必须使用
@Controller
,并且您的 Controller 方法必须返回模板的名称。如果计划构建RESTful应用程序,请同时使用@RestController
或@Controller
和@ResponseBody
的组合。关于html - 使用@Controller显示index.html页面| Spring 靴,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48575559/