假設你已經設置了項目和構建系統,你能夠建立Web服務。java
經過考慮服務交互來開始這個過程。git
該服務將處理GET請求/greeting,可選地使用name查詢字符串中的參數。該GET請求應該返回200 OK在表示問候的身體與JSON響應。它應該看起來像這樣:github
{ "id": 1, "content": "Hello, World!" }
該id字段是問候語的惟一標識符,是問候語content的文本表示。web
要爲問候語表示建模,請建立資源表示形式類。提供一個普通的舊java對象,其中包含id和content數據的字段,構造函數和訪問器:spring
@Data @AllArgsConstructor public class Greeting { private final long id; private final String content; }
正如你在下面的步驟中看到的,Spring使用Jackson JSON庫自動將類型實例Greeting封送到JSON中。
在Spring構建RESTful Web服務的方法中,HTTP請求由控制器處理。這些組件很容易經過@RestController註釋來識別,GreetingController下面經過返回類的新實例來處理GET請求:服務器
@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)); } }
這個控制器簡潔而簡單,但引擎下有不少東西,讓咱們一步一步地分解它。restful
所述@RequestMapping註釋能夠確保HTTP請求/greeting被映射到greeting()方法。mvc
上面的示例未指定GETvs. PUT,POST等等,由於@RequestMapping默認狀況下映射全部HTTP操做。使用@RequestMapping(method=GET)縮小這種映射。
@RequestParam將查詢字符串參數的值綁定name到方法的name參數中greeting()。若是name請求中不存在該參數,defaultValue則使用「World」。app
方法體的實現基於來自的下一個值建立並返回Greeting具備id和content屬性的新對象,並使用問候counter格式化給定name的格式template。函數
傳統MVC控制器和上面的RESTful Web服務控制器之間的關鍵區別在於建立HTTP響應主體的方式。這個RESTful Web服務控制器只是填充並返回一個對象,而不是依靠視圖技術來執行將問候數據的服務器端呈現爲HTML Greeting。對象數據將做爲JSON直接寫入HTTP響應。
此代碼使用Spring 4的新@RestController註釋,它將類標記爲控制器,其中每一個方法都返回一個域對象而不是視圖。它是速記@Controller和@ResponseBody拼湊在一塊兒的。
該Greeting對象必須轉換爲JSON。因爲Spring的HTTP消息轉換器支持,您無需手動執行此轉換。由於Jackson 2在類路徑上,因此MappingJackson2HttpMessageConverter會自動選擇Spring 來將Greeting實例轉換爲JSON。
雖然能夠將此服務打包爲傳統的WAR文件以部署到外部應用程序服務器,但下面演示的更簡單的方法建立了一個獨立的應用程序。您將全部內容打包在一個可執行的JAR文件中,由一個好的舊Java main()方法驅動。在此過程當中,您使用Spring的支持將Tomcat servlet容器嵌入爲HTTP運行時,而不是部署到外部實例。
@SpringBootApplication public class RestfulWebApplication { public static void main(String[] args) { SpringApplication.run(RestfulWebApplication.class, args); } }
@SpringBootApplication 是一個便利註釋,添加了如下全部內容:
該main()方法使用Spring Boot的SpringApplication.run()方法來啓動應用程序。您是否注意到沒有一行XML?也沒有web.xml文件。此Web應用程序是100%純Java,您無需處理配置任何管道或基礎結構。
您可使用Gradle或Maven從命令行運行該應用程序。或者,您能夠構建一個包含全部必需依賴項,類和資源的可執行JAR文件,並運行該文件。這使得在整個開發生命週期中,跨不一樣環境等將服務做爲應用程序發佈,版本和部署變得容易。
若是您使用的是Gradle,則可使用運行該應用程序./gradlew bootRun。或者您可使用構建JAR文件./gradlew build。而後你能夠運行JAR文件:
java -jar build / libs / gs-rest-service-0.1.0.jar
若是您使用的是Maven,則可使用該應用程序運行該應用程序./mvnw spring-boot:run。或者您可使用構建JAR文件./mvnw clean package。而後你能夠運行JAR文件:
java -jar target / gs-rest-service-0.1.0.jar
如今該服務已啓動,請訪問http:// localhost:8080 / greeting,其中顯示:
{"id":1,"content":"Hello, World!"}
name使用http:// localhost:8080 / greeting?name = User提供查詢字符串參數。注意content屬性的值如何從「Hello,World!」改變。「你好,用戶!」:
{"id":2,"content":"Hello, User!"}
此更改代表該@RequestParam安排GreetingController正在按預期工做。該name參數已被賦予默認值「World」,但始終能夠經過查詢字符串顯式覆蓋。
另請注意id屬性如何從更改1爲2。這證實您正在GreetingController跨多個請求針對同一實例工做,而且其counter字段在每次調用時按預期遞增。
恭喜!您剛剛使用Spring開發了RESTful Web服務。
GitHub:Restful-Web