REST 和 spring-mvc

问题描述 投票:0回答:4

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

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

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

spring rest spring-mvc request
4个回答
3
投票

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

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

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

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


1
投票

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

所以:

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

1
投票

如果你用

@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/


0
投票

该方法返回一个视图

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

此方法返回字符串

@RequestMapping(value = "/home")
@ResponseBody
public String home() {
    return "Success";
}
© www.soinside.com 2019 - 2024. All rights reserved.