繁体   English   中英

REST 和 spring-mvc

[英]REST and spring-mvc

由于基于 REST 的控制器方法仅根据请求将对象(而不是视图)返回给客户端,我如何向我的用户显示视图? 或者也许更好的问题是什么是将 spring-mvc web 应用程序与 REST 结合的好方法,所以我的用户总是得到答案,不仅仅是(例如)JSON 格式,而且还有视图?

据我所知,基于 REST 的控制器非常适合移动应用程序(例如 twitter ),其中视图在应用程序内部处理,服务器唯一需要担心的是将正确的对象传递给正确的请求。 但是网络应用程序呢?

我可能在几件事上是错的(如果我错了,请纠正我),因为我正在尝试了解 REST 并且我仍在学习。

为了简化事情 - 您基本上有两个选择:1)构建 Spring MVC 应用程序。 2) 构建 REST 后端应用程序。

在第一个选项的情况下 - 在您的应用程序中,您将同时拥有后端和前端(MVC 部分)。

在第二个选项的情况下,您只构建后端应用程序并通过 REST API 公开它。 在大多数情况下,您需要为您的应用程序构建另一个应用程序 - REST 客户端。 这是一个更灵活的应用程序,因为它让您有机会从各种客户端访问您的后端应用程序 - 例如,您可以拥有 Android、IOS 应用程序,您可以使用 Angular 等实现 Web 应用程序......

请注意,thins 并不是那么简单,您可以在一个应用程序中同时拥有 REST 后端和 REST 客户端等......这只是非常非常简化,以便您获得一些总体情况。 希望这澄清了一些事情。

还有一些与 REST 和视图相关的额外说明值得学习。 从您的问题中,我可以看出您指的是 UI(用户界面)和典型 MVC 用法意义上的“视图”。 但是“视图”在不同的上下文中可能意味着不同的东西。

所以:

  • JSON 可视为数据的视图
  • JSON 是资源的表示,就像 HTML 一样
  • JSON 没有样式(除非你没有使用浏览器扩展,大多数用户都没有使用)
  • 浏览器将 HTML 识别为标记语言并对其应用样式
  • 两者都是媒体类型
  • JSON 和 HTML 都是数据格式
  • 两者都可以通过电线传输

此方法返回一个视图

@RequestMapping("/home")
String home(Model model) {  
    return "home";  // resources\templates\home.html
}

此方法返回字符串

@RequestMapping(value = "/home")
@ResponseBody
public String home() {
    return "Success";
}

如果您使用@ResponseBody注释方法,Spring 将使用 json 映射器来生成响应。 取而代之的注释与每个方法的@ResponseBody你可以注释你的类@RestController

如果要返回视图,则需要使用@Controller而不是@RestController来注释该类并配置一个viewresolver。 如果您将 spring-web 作为类路径的依赖项,Bij 默认 spring 将使用 thymeleaf 作为视图解析器。 该方法的返回类型是一个引用要呈现的模板的字符串。 模板存储在src/main/resources/templates

您可以在 spring 网站上找到指南: https : //spring.io/guides/gs/serving-web-content/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM