springboot RESTful以及參數(shù)注解的使用方式
springboot RESTful及參數(shù)注解使用
RESTful
Spring的復(fù)雜性不是來(lái)自于它處理的對(duì)象,而是來(lái)自于自身,不斷演進(jìn)發(fā)展的Spring會(huì)帶來(lái)時(shí)間維度上復(fù)雜性,比如SpringMVC以前版本的@RequestMapping,到了新版本被下面新注釋替代,相當(dāng)于增加的選項(xiàng):
@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping
說(shuō)明
1、@GetMapping
@RequestMapping(method = RequestMethod.GET)的簡(jiǎn)寫(xiě)
作用:對(duì)應(yīng)查詢(xún),表明是一個(gè)查詢(xún)URL映射
2、@PostMapping
@RequestMapping(method = RequestMethod.POST)的簡(jiǎn)寫(xiě)
作用:對(duì)應(yīng)增加,表明是一個(gè)增加URL映射
3、@PutMapping
@RequestMapping(method = RequestMethod.PUT)的簡(jiǎn)寫(xiě)
作用:對(duì)應(yīng)更新,表明是一個(gè)更新URL映射
4、@DeleteMapping
@RequestMapping(method = RequestMethod.DELETE)的簡(jiǎn)寫(xiě)
作用:對(duì)應(yīng)刪除,表明是一個(gè)刪除URL映射
5、@PatchMapping
Patch方式是對(duì)put方式的一種補(bǔ)充;
put方式是可以更新.但是更新的是整體.patch是對(duì)局部更新;
參數(shù)注解的使用
@PathVariable @RequestParam @RequestBody @ModelAttribute
說(shuō)明
1. @PathVariable
獲取路徑參數(shù)。即url/{id}這種形式
@PathVariable綁定URI模板變量值
@PathVariable是用來(lái)獲得請(qǐng)求url中的動(dòng)態(tài)參數(shù)的
@PathVariable用于將請(qǐng)求URL中的模板變量映射到功能處理方法的參數(shù)上。//配置url和方法的一個(gè)關(guān)系@RequestMapping(“item/{itemId}”)
2.@RequestParam
獲取查詢(xún)參數(shù)。即url?name=這種形式
@RequestParam注解主要有哪些參數(shù):
value
:參數(shù)名字,即入?yún)⒌恼?qǐng)求參數(shù)名字,如username表示請(qǐng)求的參數(shù)區(qū)中的名字為username的參數(shù)的值將傳入;required
:是否必須,默認(rèn)是true,表示請(qǐng)求中一定要有相應(yīng)的參數(shù),否則將報(bào)404錯(cuò)誤碼;defaultValue
:默認(rèn)值,表示如果請(qǐng)求中沒(méi)有同名參數(shù)時(shí)的默認(rèn)值,例如:
public List getItemTreeNode(@RequestParam(value=“id”,defaultValue=“0”)long parentId)
3.@RequestBody
@requestBody注解常用來(lái)處理content-type不是默認(rèn)的application/x-www-form-urlcoded編碼的內(nèi)容,比如說(shuō):application/json或者是application/xml等。一般情況下來(lái)說(shuō)常用其來(lái)處理application/json類(lèi)型。
通過(guò)@requestBody可以將請(qǐng)求體中的JSON字符串綁定到相應(yīng)的bean上,當(dāng)然,也可以將其分別綁定到對(duì)應(yīng)的字符串上。
4.@ModelAttribute
在使用RESTful風(fēng)格時(shí),使用get請(qǐng)求,又想使用對(duì)象接收參數(shù),就可以使用這個(gè)注解
不光適用于get請(qǐng)求,同樣也適用于put和delete請(qǐng)求
springboot Restful使用記錄
創(chuàng)建項(xiàng)目
通過(guò)spring官網(wǎng)創(chuàng)建項(xiàng)目
- 項(xiàng)目名稱(chēng)取為studyRest
- 項(xiàng)目依賴(lài)WEB
Rest組件使用
使用@RestController標(biāo)記類(lèi)為提供Restful服務(wù)的Contoller
@GetMapping為資源定位一部分,也就是url,對(duì)應(yīng)http://localhost:8080/test
@RestController public class MyRestContoller1 { @GetMapping("/test") public Map<String, String> getData() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "111"); data.put("name", "zhangsan"); return data; } }
測(cè)試(這里使用瀏覽器測(cè)試,后續(xù)使用Postman工具)
@GetMapping關(guān)鍵字對(duì)應(yīng)GET請(qǐng)求,也就是查詢(xún),請(qǐng)求還可以有參數(shù),對(duì)應(yīng)@PathVariable與@RequestParam注解
@GetMapping("/test/{id}") public Map<String, String> getData2(@PathVariable String id, @RequestParam(required = false) String name) { Map<String, String> data = new HashMap<String, String>(); data.put("id", id); data.put("name", name); return data; }
測(cè)試,返回值為入?yún)魅雲(yún)?shù)
Post類(lèi)型,新增操作
新增使用@PostMapping描述URL
新增一般都會(huì)帶有大量數(shù)據(jù),一般都是使用@RequestBody注解封裝參數(shù)
@PostMapping("/test2/add") public Map<String, String> addData(@RequestBody Map<String, String> data) { return data; }
測(cè)試
注意兩點(diǎn),不正確都會(huì)報(bào)錯(cuò)
- 請(qǐng)求類(lèi)型必須是POST
- Content-type必須要設(shè)置為application/json,因?yàn)槿雲(yún)⑿问綖镴SON格式
更新與刪除操作
使用上與Post一致,只是不同類(lèi)型需要使用對(duì)應(yīng)的主機(jī)
PUT
:@PutMappingDELETE
:@DeleteMapping
@PutMapping("/test2/update") public Map<String, String> updateData(@RequestBody Map<String, String> data) { return data; } @DeleteMapping("/test2/delete") public Map<String, String> deleteData(@RequestBody Map<String, String> data) { return data; }
RequestMapping使用
RequestMapping是一個(gè)通用注解,包含上述所有操作
@RestController @RequestMapping(value = "/parent") public class RequestRestContoller { @RequestMapping(value = "/get", method = RequestMethod.GET) public Map<String, String> get() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "111"); data.put("name", "zhangsan"); return data; } @RequestMapping(value = "/add", method = RequestMethod.POST) public Map<String, String> add() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "111"); data.put("name", "zhangsan"); return data; } @RequestMapping(value = "/update", method = RequestMethod.PUT) public Map<String, String> update() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "111"); data.put("name", "zhangsan"); return data; } @RequestMapping(value = "/delete", method = RequestMethod.DELETE) public Map<String, String> delete() { Map<String, String> data = new HashMap<String, String>(); data.put("id", "111"); data.put("name", "zhangsan"); return data; } }
上述還有貼在class上面的注解:@RequestMapping(value = "/parent"),如果是class上面的注解,那么方法上面的url需要加上class上面的注解
如:http://localhost:8080/parent/get或http://localhost:8080/parent/add
其中可以屬于請(qǐng)求參數(shù)和響應(yīng)數(shù)據(jù)類(lèi)型
@RequestMapping(value = "/parent", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
其中consumes 約束入?yún)㈩?lèi)型,produces 約束響應(yīng)數(shù)據(jù)類(lèi)型
測(cè)試Content-Type:text/plain報(bào)錯(cuò),由于設(shè)置了JSON格式
支持哪些格式參考Media定義
org.springframework.http.MediaType
XML格式數(shù)據(jù)支持
這里擴(kuò)展一下,返回XML格式數(shù)據(jù)
引入XML依賴(lài)包
<dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency>
測(cè)試類(lèi)
@RestController public class DataRestContoller { @RequestMapping(value = "/addJsonResponseXml", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_XML_VALUE) public Map<String, String> add(@RequestBody Map<String, String> data) { return data; } }
測(cè)試
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot validator參數(shù)驗(yàn)證restful自定義錯(cuò)誤碼響應(yīng)方式
- SpringBoot框架RESTful接口設(shè)置跨域允許
- SpringBoot+Spring Security+JWT實(shí)現(xiàn)RESTful Api權(quán)限控制的方法
- SpringBoot2.1 RESTful API項(xiàng)目腳手架(種子)項(xiàng)目
- 使用SpringBoot開(kāi)發(fā)Restful服務(wù)實(shí)現(xiàn)增刪改查功能
- SpringBoot?RESTful?應(yīng)用中的異常處理梳理小結(jié)
相關(guān)文章
淺談springioc實(shí)例化bean的三個(gè)方法
下面小編就為大家?guī)?lái)一篇淺談springioc實(shí)例化bean的三個(gè)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word)
這篇文章主要介紹了使用IDEA創(chuàng)建java項(xiàng)目的步驟詳解(hello word),本文分步驟通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Spring?Boot?接口加解密功能實(shí)現(xiàn)
在我們?nèi)粘5腏ava開(kāi)發(fā)中,免不了和其他系統(tǒng)的業(yè)務(wù)交互,或者微服務(wù)之間的接口調(diào)用;如果我們想保證數(shù)據(jù)傳輸?shù)陌踩瑢?duì)接口出參加密,入?yún)⒔饷?,這篇文章主要介紹了Spring?Boot?接口加解密功能實(shí)現(xiàn),需要的朋友可以參考下2023-04-04java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法
這篇文章主要介紹了java中javamail發(fā)送帶附件的郵件實(shí)現(xiàn)方法,較為詳細(xì)的分析了JavaMail發(fā)送郵件的用法,是非常實(shí)用的技巧,需要的朋友可以參考下2015-01-01java+vue實(shí)現(xiàn)添加單選題、多選題到題庫(kù)功能
這篇文章主要為大家詳細(xì)介紹了java+vue實(shí)現(xiàn)添加單選題、多選題到題庫(kù)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04java基于雙向環(huán)形鏈表解決丟手帕問(wèn)題的方法示例
這篇文章主要介紹了java基于雙向環(huán)形鏈表解決丟手帕問(wèn)題的方法,簡(jiǎn)單描述了丟手帕問(wèn)題,并結(jié)合實(shí)例形式給出了Java基于雙向環(huán)形鏈表解決丟手帕問(wèn)題的步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-11-11SpringBoot項(xiàng)目集成Flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制的詳細(xì)教程
這篇文章主要介紹了SpringBoot項(xiàng)目集成Flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制,本文分步驟通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單井字棋小游戲代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03