显示我创建的 index.html 网页时出现问题。转到 localhost:8080 时,我不断收到的输出是字符串值“index”,而不是网页本身。 /templates 目录的图像和本地主机给出的结果可以在下面找到(超链接)
@Controller
public class IndexController {
@RequestMapping("/")
@ResponseBody
public String index() {
return "index";
}
}
原文由 Yuri Khechoyan 发布,翻译遵循 CC BY-SA 4.0 许可协议
从控制器方法 addNewBooking(…) 中删除
@ResponseBody
。使用@ResponseBody
你告诉 Spring 将你的方法的结果映射到 HTTP 响应主体,因此你的浏览器将它显示为纯文本(如果你想用 Spring 开发 RESTful API,你需要这个)。当您使用 Spring MVC 时,您想要返回一个视图,因此您不需要@ResponseBody
。编辑 1: 详细解释我写的内容。
使用
Spring Web
你有两种选择来编写你的应用程序:JSPs
Spring MVC
Thymeleaf templates
Freemaker templates
对于选择 1,您使用
@Controller
注释您的控制器,并提供几个端点,您的 Spring 应用程序将在这些端点使用您的服务器端渲染器模板进行响应。您的所有控制器都返回一个String
这是您要传输到浏览器的模板的名称。 Spring 将采用String
名称,如index
并将返回例如呈现的index.jsp
到请求。示例如下所示:For choice 2 you annotate your controller with
@RestController
OR you@Controller
and@ResponseBody
together (technically@RestController
is just a combination of@Controller
和`@ResponseBody)。使用此设置,您告诉 Spring 使用您的控制器方法返回类型并将其解析为 JSON,例如使用 Jackson 将其放入 HTTP 正文中。如果您在浏览器中访问这样的端点,您将获得对象的 JSON 表示形式。看下面的例子:人类:
如果您现在访问
http://localhost:8080/persons
您可以获得以下输出:总结一下解释:如果你想提供视图(服务器端呈现的 HTML 页面),你必须使用
@Controller
并且你的控制器方法必须返回模板的名称。如果计划构建 RESTful 应用程序,请使用@RestController
或@Controller
和@ResponseBody
的组合。