spring url 參數編碼、解碼

encoder decoder.png
背景 :

今天遇到一個類似于下面這樣的一個問題,后端寫了一個 GET resful 接口,請求的時候需要帶一個test參數,當請求參數里有+號的時候,后端接口把+號替換成了 空字符串。

客戶端請求如下:

curl localhost/rest/test?test=123456+

后端接口如下:

@RestController
@RequestMapping("/rest")
public class TestController {

  @RequestMapping("/test")
  public ResponseEntity<String> test(@RequestParam final String test){
    return ResponseEntity.ok("Requested: " + test);
  }
}
后端調試接口獲得的值為
'123456 '

之所以出現這個原因就是,+號在url參數里的時候必須要進行編碼,否則后端就會出現問題,把+號,當做空字符串來進行處理。但是如果前端調用接口的時候進行了編碼,那么后端就需要進行相應的解碼,否則也會出問題。

把url里的參數進行編碼后變成下面這樣了:

123456%2b

后端接口debug的時候取到的值如下:

123456+

可以看到,后端獲取了正確的數據,或許有些人感覺很奇怪,我并沒好對參數進行解碼,為什么還是可以獲取到正確的數據呢?
其實spring @RequestParam這個注解標識的參數,會自動的進行解碼,spring幫我們做了這樣一件事情。

如果用戶在服務端想對url參數進行編碼或者解碼怎么辦呢?

String encodedParam = URLEncoder.encode(test, "UTF-8"); //encode
String decodedParam = URLDecoder.decode(test, "UTF-8"); //decode
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,948評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,958評論 6 342
  • 提筆寫這篇文章,名字還取得這么難聽,一看就是沒工作有工作的大媽大姐抱怨生活如何艱難。其實也不是也是。是我看...
    夏又一夏閱讀 156評論 0 0
  • 習慣在養成之初就像一根看不見的細線,但是我們每重復一次習慣,這根線就會變得更粗壯一點,最終它會變成一條粗大的纜繩,...
    李子能閱讀 179評論 0 2
  • (一) 陶晶不相信會有從來不笑的人,偏偏褚言打破了她的認知。在一起一年的時間里,陶晶不止一次懷疑,褚言是否真的喜...
    宓笙閱讀 554評論 1 2