Springboot 實現 Restful 服務,基於 HTTP / JSON 傳輸
ysocket.com 泥瓦匠BYSocket 希望轉載,保留摘要,謝謝! “怎樣的人生才是沒有遺憾的人生?我的體會是:(1)擁有健康;(2)創造“難忘時刻”;(3)盡力做好自己,不必改變世界;(4)活在當下。” – 《向死而生》李開復 基於上一篇《Springboot 整合 Mybatis 的完整 Web 案例》,這邊我們著重在 控制層 講講。講講如何在 Springboot 實現 Restful 服務,基於 HTTP / JSON 傳輸。 一、執行 springboot-restful 工程
git clone 下載工程 springboot-learning-example ,專案地址見 GitHub – https://github.com/JeffLi1993/springboot-learning-example。下面開始執行工程步驟(Quick Start):
1.資料庫準備
a.建立資料庫 springbootdb:
CREATE DATABASE springbootdb;
b.建立表 city :(因為我喜歡徒步)
DROP TABLE IF EXISTS city
;
CREATE TABLE city
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘城市編號’,
province_id
int(10) unsigned NOT NULL COMMENT ‘省份編號’,
city_name
varchar(25) DEFAULT NULL COMMENT ‘城市名稱’,
description
varchar(25) DEFAULT NULL COMMENT ‘描述’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
c.插入資料
INSERT city VALUES (1 ,1,’溫嶺市’,’BYSocket 的家在溫嶺。’);
2. springboot-restful 工程專案結構介紹
springboot-restful 工程專案結構如下圖所示:
org.spring.springboot.controller – Controller 層
org.spring.springboot.dao – 資料操作層 DAO
org.spring.springboot.domain – 實體類
org.spring.springboot.service – 業務邏輯層
Application – 應用啟動類
application.properties – 應用配置檔案,應用啟動會自動讀取配置
3.改資料庫配置
開啟 application.properties 檔案, 修改相應的資料來源配置,比如資料來源地址、賬號、密碼等。(如果不是用 MySQL,自行新增連線驅動 pom,然後修改驅動名配置。)
4.編譯工程
在專案根目錄 springboot-learning-example,執行 maven 指令:
mvn clean install
5.執行工程
右鍵執行 springboot-restful 工程 Application 應用啟動類的 main 函式。
用 postman 工具可以如下操作,
根據 ID,獲取城市資訊
GET http://127.0.0.1:8080/api/city/1
獲取城市列表 GET http://127.0.0.1:8080/api/city
新增城市資訊 POST http://127.0.0.1:8080/api/city
更新城市資訊 PUT http://127.0.0.1:8080/api/city
刪除城市資訊 DELETE http://127.0.0.1:8080/api/city/2
二、springboot-restful 工程控制層實現詳解
1.什麼是 REST? REST 是屬於 WEB 自身的一種架構風格,是在 HTTP 1.1 規範下實現的。Representational State Transfer 全稱翻譯為表現層狀態轉化。Resource:資源。比如 newsfeed;Representational:表現形式,比如用JSON,富文字等;State Transfer:狀態變化。通過HTTP 動作實現。 理解 REST ,要明白五個關鍵要素: 資源(Resource) 資源的表述(Representation) 狀態轉移(State Transfer) 統一介面(Uniform Interface) 超文字驅動(Hypertext Driven) 6 個主要特性: 面向資源(Resource Oriented) 可定址(Addressability) 連通性(Connectedness) 無狀態(Statelessness) 統一介面(Uniform Interface) 超文字驅動(Hypertext Driven) 具體這裡就不一一展開,詳見 http://www.infoq.com/cn/articles/understanding-restful-style 2.Spring 對 REST 支援實現 CityRestController.java 城市 Controller 實現 Restful HTTP 服務 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class CityRestController {
@Autowired
private CityService cityService;
@RequestMapping(value = "/api/city/{id}", method = RequestMethod.GET)
public City findOneCity(@PathVariable("id") Long id) {
return cityService.findCityById(id);
}
@RequestMapping(value = "/api/city", method = RequestMethod.GET)
public List<City> findAllCity() {
return cityService.findAllCity();
}
@RequestMapping(value = "/api/city", method = RequestMethod.POST)
public void createCity(@RequestBody City city) {
cityService.saveCity(city);
}
@RequestMapping(value = "/api/city", method = RequestMethod.PUT)
public void modifyCity(@RequestBody City city) {
cityService.updateCity(city);
}
@RequestMapping(value = "/api/city/{id}", method = RequestMethod.DELETE)
public void modifyCity(@PathVariable("id") Long id) {
cityService.deleteCity(id);
}
} 具體 Service 、dao 層實現看程式碼GitHub https://github.com/JeffLi1993/springboot-learning-example/tree/master/springboot-restful 程式碼詳解: @RequestMapping 處理請求地址對映。 method – 指定請求的方法型別:POST/GET/DELETE/PUT 等 value – 指定實際的請求地址 consumes – 指定處理請求的提交內容型別,例如 Content-Type 頭部設定application/json, text/html produces – 指定返回的內容型別 @PathVariable URL 對映時,用於繫結請求引數到方法引數 @RequestBody 這裡註解用於讀取請求體 boy 的資料,通過 HttpMessageConverter 解析繫結到物件中 3.HTTP 知識補充 GET 請求獲取Request-URI所標識的資源 POST 在Request-URI所標識的資源後附加新的資料 HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭 PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識 DELETE 請求伺服器刪除Request-URI所標識的資源 TRACE 請求伺服器回送收到的請求資訊,主要用於測試或診斷 CONNECT 保留將來使用 OPTIONS 請求查詢伺服器的效能,或者查詢與資源相關的選項和需求 詳情請看《JavaEE 要懂的小事:一、圖解Http協議》 三、小結
Springboot 實現 Restful 服務,基於 HTTP / JSON 傳輸,適用於前後端分離。這只是個小demo,沒有加入bean validation這種校驗。還有各種業務場景。 推薦:《 Springboot 整合 Mybatis 的完整 Web 案例》 歡迎掃一掃我的公眾號關注 — 及時得到部落格訂閱哦! — http://www.bysocket.com/ — — https://github.com/JeffLi1993 —
相關文章
- 基於 SpringMVC 的 RESTful HTTP API 實踐(服務端)SpringMVCRESTHTTPAPI服務端
- SpringCloud微服務系列(2): 建立一個基於Springboot的RESTFul服務GCCloud微服務Spring BootREST
- Flask 系列 - 基於 Flask 提供 RESTful Web 服務FlaskRESTWeb
- Qt實現基於多執行緒的檔案傳輸(服務端,客戶端)QT執行緒服務端客戶端
- 基於TCP長連線實現的帶QOS的訊息傳輸服務KTMTTCP
- python使用json web token (jwt)實現http api的加密傳輸PythonJSONWebJWTHTTPAPI加密
- React服務端渲染實現(基於Dva)React服務端
- 基於HTTP協議,以JSON為資料互動格式的RESTful API。HTTP協議JSONRESTAPI
- SpringBoot Restful 介面實現Spring BootREST
- CXF+Spring+JAXB+Json構建Restful服務SpringJSONREST
- Go實現基於WebSocket的彈幕服務GoWeb
- 基於lua協程的AI服務實現AI
- 基於SpringBoot+Netty實現一個自己的推送服務系統Spring BootNetty
- 網路通訊3:HTTP實現文字傳輸HTTP
- 基於 swoole 的 websocket 服務實現狀態同步Web
- spring cloud feign實現遠端呼叫服務傳輸檔案SpringCloud
- php原生socket實現客戶端與服務端資料傳輸PHP客戶端服務端
- SpringBoot 整合 RabbitMQ 實現訊息可靠傳輸Spring BootMQ
- Kubernetes基於haproxy實現ingress服務暴露
- 基於rsync實現海量檔案高速傳輸的解決方案
- 搭建 Restful Web 服務RESTWeb
- 使用Docker實現Spring Boot Restful Web服務案例原始碼DockerSpring BootRESTWeb原始碼
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- 基於Springboot+Dubbo+Nacos 註解方式實現微服務呼叫Spring Boot微服務
- 基於APNs最新HTTP/2介面實現iOS的高效能訊息推送(服務端篇)HTTPiOS服務端
- Swagger基於SpringBoot實現SwaggerSpring Boot
- 在 RESTful Web 服務中下載和上傳檔案 - mscharhagRESTWeb
- 基於Yarp實現內網http穿透內網HTTP穿透
- 基於HttpClient實現Http訪問工具類HTTPclient
- 實現基於json的級聯選單JSON
- 網路通訊4:HTTP實現二進位制傳輸HTTP
- Android音訊實時傳輸與播放(二):服務端Android音訊服務端
- Go基於gRPC實現客戶端連入服務端GoRPC客戶端服務端
- laravel基於remote model思想實現快速服務化(入門篇)LaravelREM
- 基於 Nginx&Lua 實現自建服務端埋點系統Nginx服務端
- 記一次 Angular 基於 STOMP over WebSocket 實現流文字傳輸AngularWeb
- 7 Redo Transport Services 日誌傳輸服務
- FTP檔案服務搭建與同步傳輸FTP