網(wǎng)站建設(shè)后臺(tái) 手工上傳深圳百度快速排名提升
文章目錄
- REST
- REST基本介紹
- RESTful快速入門
- RESTful快速開發(fā)
REST
REST基本介紹
REST (Representational State Transfer), 表現(xiàn)形式狀態(tài)轉(zhuǎn)換(訪問(wèn)網(wǎng)絡(luò)資源的風(fēng)格)
傳統(tǒng)風(fēng)格資源描述形式
- http://localhost/user/getById?id=1
- http://localhost/user/saveUser
REST風(fēng)格描述形式
- http://localhost/user/1
- http://localhost/user
REST優(yōu)點(diǎn):
隱藏資源的訪問(wèn)行為,無(wú)法通過(guò)地址得知對(duì)資源是何種操作
書寫簡(jiǎn)化
REST風(fēng)格介紹:
按照REST風(fēng)格訪問(wèn)資源時(shí)使用行為動(dòng)作區(qū)分對(duì)資源進(jìn)行了何種操作
- http://localhost/users 查詢?nèi)坑脩粜畔?GET(查詢)
- http://localhost/users/1 查詢指定用戶信息 GET(查詢)
- http://localhost/users 添加用戶信息 POST(新增/保存)
- http://localhost/users 修改用戶信息 PUT(修改/更新)
- http://localhost/users/1 刪除用戶信息 DELETE(刪除)
根據(jù)REST風(fēng)格對(duì)資源進(jìn)行訪問(wèn)稱為RESTful
注意事項(xiàng):
上述行為是約定方式,約定不是規(guī)范,可以打破,所以稱REST風(fēng)格,而不是REST規(guī)范
描述模塊的名稱通常使用復(fù)數(shù),也就是加s的格式描述,表示此類資源,而非單個(gè)資源,例如:users、books、accounts……
RESTful快速入門
1. 設(shè)定http請(qǐng)求動(dòng)作(請(qǐng)求方式)
通過(guò)@RequestMapping注解的, method屬性
@Controller
public class UserController {// 新增/保存 指定請(qǐng)求行為: POST@RequestMapping(value = "/users", method = RequestMethod.POST)@ResponseBodypublic String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}// 刪除 指定請(qǐng)求行為: DELETE@RequestMapping(value = "/users", method = RequestMethod.DELETE)@ResponseBodypublic String delete(Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}
}
2. 設(shè)定請(qǐng)求參數(shù)(路徑變量)
@PathVariable注解, 寫在形參變量的前面, 綁定路徑參數(shù)與處理器方法形參間的關(guān)系,要求路徑參數(shù)名與形參名一一對(duì)應(yīng)
設(shè)置完成后可以在路徑中攜帶id訪問(wèn): http://localhost:80/users/1
@Controller
public class UserController {// 定義路徑參數(shù)@RequestMapping(value = "/users/{id}", method = RequestMethod.DELETE)@ResponseBody// 從路徑參數(shù)中取值public String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}
}
@RequestBody @RequestParam @PathVariable 對(duì)比:
區(qū)別:
@RequestParam用于接收url地址傳參或表單傳參
@RequestBody用于接收json數(shù)據(jù)
@PathVariable用于接收路徑參數(shù),使用{參數(shù)名稱}描述路徑參數(shù)
應(yīng)用:
后期開發(fā)中,發(fā)送請(qǐng)求參數(shù)超過(guò)1個(gè)時(shí),以json格式為主,@RequestBody應(yīng)用較廣
如果發(fā)送非json格式數(shù)據(jù),選用@RequestParam接收請(qǐng)求參數(shù)
采用RESTful進(jìn)行開發(fā),當(dāng)參數(shù)數(shù)量較少時(shí),例如1個(gè),可以采用@PathVariable接收請(qǐng)求路徑變量,通常用于傳遞id值
RESTful快速開發(fā)
使用RESTful開發(fā), 我們可以發(fā)現(xiàn)有許多重復(fù)的代碼
例如下面代碼: 每一個(gè)處理器都需要寫
value = "/users"
以及@ResponseBody
;
@Controller
public class UserController {@RequestMapping(value = "/users", method = RequestMethod.POST)@ResponseBodypublic String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}@RequestMapping(value = "/users", method = RequestMethod.PUT)@ResponseBodypublic String update(@RequestBody User user) {System.out.println("user update..." + user);return "{'module': 'user update'}";}
}
簡(jiǎn)化一: 將公共的路徑提取到處理器所在類上
@Controller
@RequestMapping("/users")
public class UserController {@RequestMapping(method = RequestMethod.POST)@ResponseBodypublic String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)@ResponseBodypublic String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}
}
簡(jiǎn)化二: 將每個(gè)處理器都有的@RequestBody注解提取到處理器所在類上
@Controller
@RequestMapping("/users")
@ResponseBody
public class UserController {@RequestMapping(method = RequestMethod.POST)public String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)public String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}
}
簡(jiǎn)化三: @RestController注解
@RestController等同于@ResponseBody加上@ResponseBody注解組合起來(lái)的功能
@RestController
@RequestMapping("/users")
public class UserController {@RequestMapping(method = RequestMethod.POST)public String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)public String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}
}
簡(jiǎn)化四: 通過(guò)@GetMapping @PostMapping @PutMapping @DeleteMapping注解替代method = RequestMethod.XXX
設(shè)置當(dāng)前控制器方法請(qǐng)求訪問(wèn)路徑與請(qǐng)求動(dòng)作,每種對(duì)應(yīng)一個(gè)請(qǐng)求動(dòng)作,例如@GetMapping對(duì)應(yīng)GET請(qǐng)求;
默認(rèn)屬性value:請(qǐng)求訪問(wèn)路徑
@RestController
@RequestMapping("/users")
public class UserController {// 新增/保存 指定請(qǐng)求行為: POST@PostMappingpublic String save(@RequestBody User user) {System.out.println("user save..." + user);return "{'module': 'user save'}";}// 刪除 指定請(qǐng)求行為: DELETE@DeleteMapping("/{id}")public String delete(@PathVariable Integer id) {System.out.println("user delete..." + id);return "{'module': 'user delete'}";}// 修改/更新 指定請(qǐng)求行為: PUT@PutMappingpublic String update(@RequestBody User user) {System.out.println("user update..." + user);return "{'module': 'user update'}";}// 查詢?nèi)?指定請(qǐng)求行為: GET@GetMappingpublic String selectAll() {System.out.println("user selectAll...");return "{'module': 'user selectAll'}";}// 查詢根據(jù)id 指定請(qǐng)求行為: GET@GetMapping("/{id}")public String selectById(@PathVariable Integer id) {System.out.println("user selectById..." + id);return "{'module': 'user selectById'}";}
}