譯 2.Spring構建REST Web Service

上篇文章咱們已經對Spring 已經有了一個初步的認識,接下來本篇文章咱們將繼續一塊兒在官網學習新技術。 原文地址:https://spring.io/guides/gs/rest-service/
html


本指南指導您使用Spring建立一個「Hello World」REST Web Service 的過程。java

1. 你將會創建什麼?

Tips: 上面已經提到,咱們將使用Spring建立一個「Hello World」REST Web服務的過程,可是最終的效果是什麼樣呢?git

咱們將構建一個接受HTTP GET請求的服務:github

http://localhost:8080/greeting

當咱們發出上面的Http Get 請求後,會響應返回下面的JSON 內容。web

{"id":1,"content":"Hello, World!"}

咱們也能夠帶一個參數進行請求spring

http://localhost:8080/greeting?name=User

 Name參數值重寫「Word」的默認值,並反映在響應中:apache

{"id":1,"content":"Hello, User!"}

2. 你將須要準備什麼?

3.如何完成本指南?

像大多數Spriing 入門指南同樣,你能夠從頭開始,完成每一步,或者你能夠繞過已經熟悉的基本設置步驟。無論怎樣,你最終都會獲得工做代碼

3.1 獲取工做代碼

  a.使用Maven構建

  b. 使用Gradle構建

  c. 使用IDE構建

  d.  點擊下載 而後 解壓倉庫源碼

  e. 使用git 克隆

git clone https://github.com/spring-guides/gs-rest-service.git

上面有五種方法,可是因爲以後咱們會常用IDE來完成這些操做,因此這裏咱們使用IDE 來構建入門指南項目

3.1.1 用STS開始入門指南

本指南引導您使用Spring工具套件(STS)構建一個入門指南

3.1.1.1 你將會構建什麼?

您將選擇Spring指南並將其導入Spring Tool Suite。而後你能夠閱讀指南,處理代碼,運行項目。

3.1.1.2 你須要什麼?

3.1.1.3 安裝STS

   若是你尚未安裝STS,請訪問上面的連接。從那裏,您能夠下載一個副本爲您的平臺。要安裝它,只需解壓縮下載的存檔文件。

   當你完成後,繼續登錄 STS

3.1.1.4 導入入門指南

   使用STS啓動並運行,從文件菜單打開Import Spring Getting Started Content 嚮導。

 點擊File ——> New ————> Import Spring Geting Started Content

而後會彈出來一個窗口嚮導,將爲您提供從Spring網站搜索和挑選任何已發佈指南的機會。

你能夠瀏覽列表,或者輸入搜索詞來當即過濾選項。

當提供即時搜索結果時,該標準適用於標題和描述。支持通配符。

輸入rest ,選擇 Rest Service ,點擊Finish 

 

您能夠選擇Maven或Gradle做爲構建系統來使用。

您還能夠決定是否抓取初始代碼集、完成代碼集,或二者兼而有之。

對於大多數項目,

  • (initial)初始代碼集是一個空的項目,使得您能夠經過指南複製和粘貼您的方式
  •   (Complete)完整的代碼集是來自已經進入的指南的全部代碼。若是你抓住這兩個,你能夠比較你的工做與指南的差別。

最後,你可讓STS向網站上的指南打開瀏覽器標籤。這會讓你在不離開STS的狀況下經過嚮導工做。

 STS將在您的工做區中建立兩個新項目,導入消耗REST代碼庫(初始和完整),並在STS中打開瀏覽器選項卡,以下所示:

 

Tips: 

gs-rest-service-complete 是完成後的項目

gs-rest-service-initial 是初始化一個空的項目

3.1.2 用Intellij Idea 開始入門指南

 本指南指導您使用Intellij Idea 構建一個入門指南。

3.1.2.1 你將會構建什麼?

你會選擇一個Spring指南並導入到iTeliJ的想法中。而後你能夠閱讀指南,處理代碼,運行項目。

3.1.2.2 你須要準備什麼?

3.1.2.3 安裝 IntelliJ IDEA

若是你尚未安裝 IntelliJ IDEA (Ultimate Edition) ,請訪問上面的連接。從那裏,您能夠下載一個副本爲您的平臺。要安裝它,只需解壓縮下載的存檔文件。

 當你完成後,繼續啓動Intellij IDEA

3.1.2.4 導入入門指南

要導入現有的項目,須要一些代碼,

點擊下載

或者使用Git 克隆或複製其中一個入門指南,例如REST服務指南:

git clone https://github.com/spring-guides/gs-rest-service.git

下載解壓後如圖所示

使用Intellij IDEA 啓動和運行,點擊歡迎屏幕上的導入項目,或在主菜單上打開文件:

 在彈出對話框中,確保在完整文件夾下選擇Maven的POM.xml或Gradle的build.gradle文件:

這裏咱們選擇build.gradle

Intellij IDEA 將建立一個項目,全部的代碼從指南準備運行。

保持默認,點擊OK

構建完成後如圖所示

3.2 建立資源表示類

 既然已經創建了項目並創建了系統,就能夠建立Web服務。

 經過考慮服務交互來開始這個過程。

服務將處理查詢t /greeting  GET 請求,可選地在查詢字符串中使用name參數。GET請求應該返回一個200 OK響應,其中JSON在表示greetin的主體中。它應該看起來像這樣:

{
    "id": 1,
    "content": "Hello, World!"
}

ID字段是問候語的惟一標識符,content是問候語的文本表示。

 爲了建模問候語表示,您建立一個資源表示類。提供一個字段,構造函數普通java對象,併爲ID和content數據訪問:

src/main/java/hello/Greeting.java

package hello;

public class Greeting {
    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }
    public String getContent() {
        return content;
    }
}

 正如您在下面的步驟中看到的,Spring使用Jackson JSON庫自動將問候類型的實例封送到JSON中。

 接下來,建立將爲這些問候服務的資源控制器。

3.3 建立資源Controller

在Spring構建REST Web服務的方法中,HTTP請求由控制器處理。這些組件很容易被@ RESTController註釋標識,下面的GreetingController經過返回Greeting 類的新實例來處理GET請求/greeting:

 src/main/java/hello/GreetingController.java

package hello;

import java.util.concurrent.atomic.AtomicLong;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {
    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

這個控制器簡潔明瞭,但引擎蓋下還有不少事情要作。讓咱們一步一步地打破它。

 @RequestMapping  註解 確保將HTTP請求 /greeting映射到 greeting()方法。

上面的示例不指定GET、PUT、POST等等,由於@RequestMapping 默認映射全部HTTP操做。使用@RequestMapping(Method= GET)來縮小此映射。

@RequestParam將查詢字符串參數name 的值綁定到greeting()方法的name參數中。 若是請求中缺乏name參數,則使用「World」的默認值。

方法體的實現基於計數器的下一個值建立並返回一個帶有id和content屬性的新Greeting對象,並使用問候template 格式化給定name。

 

傳統的MVC控制器和上面的RESTful Web服務控制器之間的一個主要區別在於HTTP響應主體的建立方式。

這個RESTful Web服務控制器只需填充並返回一個Greeting對象,而不是依賴視圖技術將問候數據的服務器端呈現呈現給HTML。

對象數據將做爲JSON直接寫入HTTP響應。

此代碼使用Spring 4的新的@RestController註釋,該註釋將類標記爲控制器,其中每一個方法都返回一個域對象而不是視圖。 它是@Controller和@ResponseBody的縮寫。

@RestController = = @Controller + @ResponseBody 

Greeting對象必須轉換爲JSON。 因爲Spring的HTTP消息轉換器支持,您不須要手動執行此轉換。

因爲Jackson 2位於classpath中,所以會自動選擇Spring的MappingJackson2HttpMessageConverter將Greeting實例轉換爲JSON。

3.4 使應用程序可執行

雖然能夠將此服務做爲傳統WAR文件打包以部署到外部應用程序服務器,但下面演示的更簡單的方法會建立獨立應用程序。

您將全部內容打包到一個單獨的,可執行的JAR文件中,由一個良好的舊Java main()方法驅動。

一路上,您使用Spring的支持將Tomcat servlet容器做爲HTTP運行時嵌入,而不是部署到外部實例。

src/main/java/hello/Application.java

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
} 

SpringBootApplication是一個方便的註解,它增長了如下全部內容:

  • @Configuration將類標記爲應用程序上下文的bean定義的來源。
  • @EnableAutoConfiguration通知Spring Boot根據類路徑設置,其餘bean和各類屬性設置開始添加bean。
  • 一般你會爲Spring MVC應用程序添加@EnableWebMvc,但Spring Boot在類路徑中看到spring-webmvc時會自動添加。 這將該應用程序標記爲Web應用程序並激活關鍵行爲,例如設置DispatcherServlet。
  • @ComponentScan告訴Spring在hello包中查找其餘組件,配置和服務,以便找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法啓動應用程序。你有沒有注意到沒有一行XML? 沒有web.xml文件。這個Web應用程序是100%純Java,您沒必要處理配置任何管道或基礎設施。

3.5 構建一個可執行的JAR

您可使用Gradle或Maven從命令行運行應用程序。 或者您能夠構建一個包含全部必需的依賴項,類和資源的可執行JAR文件,並運行該文件。 這使得在整個開發生命週期內跨越不一樣環境等,將服務做爲應用程序發佈,版本化和部署變得很是容易。

若是您正在使用Gradle,則可使用./gradlew bootRun運行該應用程序。 或者您可使用./gradlew構建構建JAR文件。 而後你能夠運行JAR文件:

java -jar build/libs/gs-rest-service-0.1.0.jar

若是您使用的是Maven,則可使用./mvnw spring-boot:run來運行該應用程序。 或者,您可使用./mvnw clean包構建JAR文件。 而後你能夠運行JAR文件:

java -jar target/gs-rest-service-0.1.0.jar

上述過程將建立一個可運行的JAR。 您也能夠選擇構建經典的WAR文件。

記錄輸出顯示。 該服務應該在幾秒鐘內啓動並運行。

3.6 測試 service

 如今這個service已經啓動,咱們訪問 http://127.0.0.1:8080/greeting 你將會看到這樣的結果

{"id":1,"content":"Hello, World!"}

提供一個name參數進行查詢,訪問 http://localhost:8080/greeting?name=User

{"id":2,"content":"Hello, User!"}

注意content 文本內容已經從 "Hello ,World!" 變成了" Hello, User!"

此更改演示了GreetingController中的@RequestParam排列按預期工做。 name參數已被賦予默認值「World」,但始終能夠經過查詢字符串顯式覆蓋。

還要注意id屬性如何從1更改成2.這證實您正在針對多個請求中的同一個GreetingController實例工做,而且它的計數器字段按照預期在每次調用時遞增。

恭喜! 您剛剛用Spring開發了一個RESTful Web Service。

源碼下載:https://github.com/geekxingyun/JavaEE-Framework-Sample/tree/master/Spring-Build-Restful-Web-Service-Sample

相關文章
相關標籤/搜索