上篇文章咱們已經對Spring 已經有了一個初步的認識,接下來本篇文章咱們將繼續一塊兒在官網學習新技術。 原文地址:https://spring.io/guides/gs/rest-service/
html
本指南指導您使用Spring建立一個「Hello World」REST Web Service 的過程。java
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!"}
大約十五分鐘瀏覽器
一個喜歡的文本編輯器或者IDE服務器
JDK 1.8 or latermvc
You can also import the code straight into your IDE:
像大多數Spriing 入門指南同樣,你能夠從頭開始,完成每一步,或者你能夠繞過已經熟悉的基本設置步驟。無論怎樣,你最終都會獲得工做代碼
a.使用Maven構建
b. 使用Gradle構建
c. 使用IDE構建
閱讀怎麼使用 Spring Tool Suite.構建
閱讀怎麼使用 IntelliJ IDEA 構建
d. 點擊下載 而後 解壓倉庫源碼
e. 使用git 克隆
git clone https://github.com/spring-guides/gs-rest-service.git
上面有五種方法,可是因爲以後咱們會常用IDE來完成這些操做,因此這裏咱們使用IDE 來構建入門指南項目
本指南引導您使用Spring工具套件(STS)構建一個入門指南。
您將選擇Spring指南並將其導入Spring Tool Suite。而後你能夠閱讀指南,處理代碼,運行項目。
大約15分鐘
JDK 8 或者更高
若是你尚未安裝STS,請訪問上面的連接。從那裏,您能夠下載一個副本爲您的平臺。要安裝它,只需解壓縮下載的存檔文件。
當你完成後,繼續登錄 STS
使用STS啓動並運行,從文件菜單打開Import Spring Getting Started Content 嚮導。
點擊File ——> New ————> Import Spring Geting Started Content
而後會彈出來一個窗口嚮導,將爲您提供從Spring網站搜索和挑選任何已發佈指南的機會。
你能夠瀏覽列表,或者輸入搜索詞來當即過濾選項。
當提供即時搜索結果時,該標準適用於標題和描述。支持通配符。
輸入rest ,選擇 Rest Service ,點擊Finish
您能夠選擇Maven或Gradle做爲構建系統來使用。
您還能夠決定是否抓取初始代碼集、完成代碼集,或二者兼而有之。
對於大多數項目,
最後,你可讓STS向網站上的指南打開瀏覽器標籤。這會讓你在不離開STS的狀況下經過嚮導工做。
STS將在您的工做區中建立兩個新項目,導入消耗REST代碼庫(初始和完整),並在STS中打開瀏覽器選項卡,以下所示:
Tips:
gs-rest-service-complete 是完成後的項目
gs-rest-service-initial 是初始化一個空的項目
本指南指導您使用Intellij Idea 構建一個入門指南。
你會選擇一個Spring指南並導入到iTeliJ的想法中。而後你能夠閱讀指南,處理代碼,運行項目。
15分鐘
JDK 6 或者更高
若是你尚未安裝 IntelliJ IDEA (Ultimate Edition) ,請訪問上面的連接。從那裏,您能夠下載一個副本爲您的平臺。要安裝它,只需解壓縮下載的存檔文件。
當你完成後,繼續啓動Intellij IDEA
要導入現有的項目,須要一些代碼,
或者使用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
構建完成後如圖所示
既然已經創建了項目並創建了系統,就能夠建立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中。
接下來,建立將爲這些問候服務的資源控制器。
在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。
雖然能夠將此服務做爲傳統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,您沒必要處理配置任何管道或基礎設施。
您可使用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文件。
記錄輸出顯示。 該服務應該在幾秒鐘內啓動並運行。
如今這個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。