在寫 RESTful API 的測試案例時,遇到需要在 URL 路徑上寫空白的問題
如果使用 URLEncoder,空白會被編碼成 +,然後在 Jersey 端 + 並不會被編回空白。
簡單查了一下,實際上這個問題是誤用,URLEncoder 事實上是用在 URL 參數的工具
而把空白編成 + 則是 application/x-www-form-urlencoded 的標準作法。
因此,真正的問題在於不該使用 URLEncoder 去編碼 URL 路徑
但如果是片段的 URL,又沒辦法直接使用 new URI() 的樣子~
可以參考 [2] 的回應,使用 new URI(null, xxx, null).toASCIIString()。
另外,如果某個 Path 變數需要帶有 /,則可以手動用 String.replace() 方法,把 / 置換成 %2f"。
至少這樣在 Jersey 上是不會錯,但不保證所有的情境都可以這樣就是了 [3]。