[英]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 。
我知道可能的解決方案
@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.