Spring Boot中的 6 種API請求引數讀取方式

程序猿DD發表於2024-05-23

使用Spring Boot開發API的時候,讀取請求引數是服務端編碼中最基本的一項操作,Spring Boot中也提供了多種機制來滿足不同的API設計要求。

接下來,就透過本文,為大家總結6種常用的請求引數讀取方式。如果你發現自己知道的不到6種,那麼趕緊來查漏補缺一下。如果你知道的不止6種,那麼告訴大家,一起互相學習一下吧~

@RequestParam

這是最最最最最最常用的一個了吧,用來載入URL中?之後的引數。

比如:這個請求/user?name=didispace 就可以如下面這樣,使用@RequestParam來載入URL中的name引數

@GetMapping("/user")
@ResponseBody()
public User findUserByName(@RequestParam("name") String name){ 
    return userRepo.findByName(name);
}

@PathVariable

這是RESTful風格API中常用的註解,用來載入URL路徑中的引數

比如:這個請求/user/1 就可以如下面這樣,使用@PathVariable來載入URL中的id引數

@GetMapping("/user/{id}")
@ResponseBody()
public User findUserById(@PathVariable("id") String id){ 
    return userRepo.findById(id);
}

@MatrixVariable

這個我們用的並不是很多,但一些國外系統有提供這類API引數,這種API的引數透過;分割。

比如:這個請求/books/reviews;isbn=1234;topN=5; 就可以如下面這樣,使用@MatrixVariable來載入URL中用;分割的引數

@GetMapping("/books/reviews")
@ResponseBody()
public List<BookReview> getBookReviews( 
  @MatrixVariable String isbn,  @MatrixVariable Integer topN) {
  return bookReviewsLogic.getTopNReviewsByIsbn(isbn, topN);
}

@RequestBody

這也是最常用的一個註解,用來載入POST/PUT請求的複雜請求體(也叫:payload)。比如,客戶端需要提交一個複雜資料的時候,就要將這些資料放到請求體中,然後服務端用@RequestBody來載入請求體中的資料

@PostMapping("/add")
public boolean addAccounts(@RequestBody List<Account> accounts) throws SQLException {
     accounts.stream().forEach(a -> {
         a.setCreatedOn(Timestamp.from(Instant.now()));
         a.setLastLogin(Timestamp.from(Instant.now()));
     });
     return notificationLogic.addAccounts(accounts);
}

@RequestHeader

@RequestHeader註解用來載入請求頭中的資料,一般在業務系統中不太使用,但在基礎設施的建設中會比較常用,比如傳遞分散式系統的TraceID等。用法也很簡單,比如,假設我們將鑑權資料存在http請求頭中,那麼就可以像下面這樣用@RequestHeader來載入請求頭中的Authorization引數

@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@RequestHeader("Authorization") String authToken) {
     return userRepo.findAll();
}

@CookieValue

當我們需要與客戶端保持有狀態的互動時,就需要用到Cookie。此時,服務端讀取Cookie資料的時候,就可以像下面這樣用@CookieValue來讀取Cookie中的SessionId資料

@GetMapping("/user")
@ResponseBody()
public List<User> getUserList(@CookieValue(name = "SessionId") String sessionId) {
     return userRepo.findAll();
}

好了,今天的分享就到這裡。這些方式你都知道嗎?如果有學到新知識,歡迎點贊支援。如果你還知道其他方式,也歡迎評論分享。如果您學習過程中如遇困難?可以加入我們超高質量的Spring技術交流群,參與交流與討論,更好的學習與進步!更多Spring Boot教程可以點選直達!,歡迎收藏與轉發支援!

歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源

相關文章