@GetMapping、@PostMapping、@PutMapping、@DeleteMapping的區別


Spring4.3中引進了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping} 來幫助簡化常用的HTTP方法的映射 並更好地表達被注解方法的語義,至於@PatchMapping可以暫時不用管,Patch方式是對put方式的一種補充,put方式是可以更新.但是更新的是整體.patch是對局部更新;

@GetMapping: 處理get請求,傳統的RequestMapping來編寫應該是@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)
新方法可以簡寫為:
@GetMapping("/get/{id}");

@PostMapping:處理post請求,傳統的使用RequestMapping來編寫同上;

@PutMapping:它的使用方法與PostMapping幾乎是一樣的,沒什么區別,都可以將參數傳遞到Controller中,但是他們本質上區別很大,在這里我需要引入一個概念-----------冪等性:HTTP/1.1中的定義是指一次和多次請求某一個資源對於資源本身應該具有同樣的結果(網絡超時等問題除外)。也就是說,其任意多次執行對資源本身所產生的影響均與一次執行的影響相同,

這里需要關注幾個重點:

  1. 冪等不僅僅只是一次(或多次)請求對資源沒有副作用(比如查詢數據庫操作,沒有增刪改,因此沒有對數據庫有任何影響)。

  2. 冪等還包括第一次請求的時候對資源產生了副作用,但是以后的多次請求都不會再對資源產生副作用。

  3. 冪等關注的是以后的多次請求是否對資源產生的副作用,而不關注結果。

  4. 網絡超時等問題,不是冪等的討論范圍。

冪等性是系統服務對外一種承諾(而不是實現),承諾只要調用接口成功,外部多次調用對系統的影響是一致的。聲明為冪等的服務會認為外部調用失敗是常態,並且失敗之后必然會有重試。

以SQL為例,有下面三種場景,只有第三種場景需要開發人員使用其他策略保證冪等性:

        1、SELECT col1 FROM tab1 WHER col2=2,無論執行多少次都不會改變狀態,是天然的冪等。

        2、UPDATE tab1 SET col1=1 WHERE col2=2,無論執行成功多少次狀態都是一致的,因此也是冪等操作。

        3、UPDATE tab1 SET col1=col1+1 WHERE col2=2,每次執行的結果都會發生變化,這種不是冪等的。 

簡單來說就是多次訪問對rest服務產生的結果不會有改變。

 http協議明確規定,put、get與delete請求都是具有冪等性的,而post為非冪等性請求,就是說接口被定義為post請求可訪問時,說明這個接口對數據庫的影響是非冪等性的。所以一般插入新數據時,用post方法,更新數據庫時,用put方法,以此類推@PostMapping注解是標示接口為非冪等性接口,@PutMapping注解是標示接口為冪等性接口。

@DeleteMapping 刪除URL映射

@DeleteMapping("candidateAssess/{id}")
public ResponseResult deleteCandidateAssess(@PathVariable String id) {
    candidateAssessService.deleteCandidateAssess(id);
    return new ResponseResult("刪除成功", 200);
}

 

至於上面提到的rest服務,感興趣的可以自己查一查,對於rest服務經過查閱資料,覺得最精辟的解釋就是:

看Url就知道要什么
看http method就知道干什么
看http status code就知道結果如何

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM