簡體   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