由于基于 REST 的控制器方法仅根据请求将对象(而不是视图)返回给客户端,我如何向用户显示视图?或者也许更好的问题是将 spring-mvc Web 应用程序与 REST 结合起来的好方法是什么,这样我的用户总是能得到答案,不仅仅是(例如)JSON 格式,而且还有视图?
据我所知,基于 REST 的控制器非常适合移动应用程序(例如 twitter ),其中视图在应用程序内部处理,服务器唯一需要担心的是将正确的对象传递给正确的请求。但是网络应用程序呢?
我可能在一些事情上是错的(如果我错了,请纠正我),因为我正在尝试理解 REST 并且我仍在学习中。
为了简化事情 - 你基本上有两个选择: 1) 构建 Spring MVC 应用程序。 2) 构建 REST 后端应用程序。
如果是第一个选项 - 在您的应用程序中,您将同时拥有后端和前端(MVC 部分)。
如果选择第二个选项,您仅构建后端应用程序并通过 REST API 公开它。在大多数情况下,您需要为您的应用程序构建另一个应用程序 - REST 客户端。这是更灵活的应用程序,因为它使您有机会从各种客户端访问后端应用程序 - 例如,您可以拥有 Android、IOS 应用程序,您可以使用 Angular 等实现 Web 应用程序...
请注意,事情并没有那么简单,您可以在一个应用程序中同时拥有 REST 后端和 REST 客户端等......这只是非常非常简化,以便您获得一些总体了解。希望这能澄清一些事情。
还有一些与 REST 相关的额外说明和值得学习的观点。从你的问题中,我可以看出你的意思是 UI(用户界面)和典型 MVC 用法意义上的“视图”。但“视图”在不同的上下文中可能意味着不同的事物。
所以:
如果你用
@ResponseBody
注释一个方法,Spring将使用json映射器来生成响应。您可以使用 @ResponseBody
来注释您的类,而不是用 @RestController
注释每个方法。
如果要返回视图,则需要用
@Controller
而不是 @RestController
注释该类,并配置一个 ViewResolver。默认情况下,如果你有 spring-web 作为类路径的依赖项,spring 将使用 thymeleaf 作为 ViewResolver。该方法的返回类型是引用要呈现的模板的 String。模板存储在 src/main/resources/templates
.
您可以在 Spring 网站上找到指南:https://spring.io/guides/gs/serving-web-content/
该方法返回一个视图
@RequestMapping("/home")
String home(Model model) {
return "home"; // resources\templates\home.html
}
此方法返回字符串
@RequestMapping(value = "/home")
@ResponseBody
public String home() {
return "Success";
}