簡體   English   中英

處理REST API中的特殊字符

[英]Handling special characters in REST API

我有以下網址

http://context_path/info/abc/def

轉換成像

http://context_path/info/abc%2Fdef

我的控制器映射在哪里:

@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)

這里'id'包含正斜杠(/)。 所以,當我點擊URL時,我得到400 Bad Request

我知道可能的解決方案

  • 設置tomcat以允許正斜杠。
  • 使用URL編碼。
  • 使用@RequestParam而不是@PathVariable

但上面的解決方案對我來說是不可能的。

問:是否有任何其他解決方案(使用正則表達式或更改映射或其他任何內容)來解決問題? 另外tomcat如何正確處理其他特殊字符('。',''',':',',') ,控制器被命中,但不是'/'

嘗試但沒有工作:

1) @RequestMapping(value = "/info/{id:.*}", method = RequestMethod.GET)
2) @RequestMapping(value = "/info/{id}/**", method = RequestMethod.GET)
3) @RequestMapping(value = "/info/**", method = RequestMethod.GET)

它不是很好,但您可以使用Base64轉換

因此,您的客戶端將發送編碼的id ,然后在控制器中對其進行解碼。

import org.apache.commons.codec.binary.Base64;

@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public String get(@PathVariable String id) {
    final String realId = new String(new Base64(true).encodeBase64URLSafe(id));
    [...]
}

編輯:您應該使用Base64的url save實現

你可以使用這樣的東西如何處理包含正斜杠(/)的請求?

但它有它的局限性,我建議你在調用api的同時用'#'替換正斜杠,然后再將它替換回正斜杠,然后再在rest控制器中處理它。

如果在調用api時無法替換,則可以使用過濾器並替換那里的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM