2016年11月17日 星期四

URL Encode

在寫 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]。

參考資料
  1. Path parameters with a plus (+) sign is not decoded
  2. How to get absolute path with proper character encoding in Java?
  3. Is a slash (“/”) equivalent to an encoded slash (“%2F”) in the path portion of an HTTP URL

2016年11月11日 星期五

在 Windows 上變更 Maven 預設路徑

Maven 預設會在 ${user.home}/.m2/repository 這個路徑內存放所有下載回來的函式庫
不過如果電腦是用 SSD 當系統碟時,就會覺得這樣有點討厭 XD
想要更改路徑的話,只需要在 Maven 的設定檔上加上 localRepository 標籤,指定新的路徑即可。

例如在 ${user.home}/.m2/settings.xml 裡寫上以下的內容,即可把 Maven 存放函式庫的位置移到 D:\maven 裡。

<settings>
	<localRepository>D:\maven</localRepository>
</settings>
參考資料
  1. Configuring Maven