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

2016年10月20日 星期四

在全新的 Tomcat 8 設定 HTTPS

前面的文章成功在 Apache2 設定 HTTPS 之後,接著要在 Tomcat 8 上也設定 HTTPS。
環境一樣是要用全新的 Tomcat,因此流程也會包含環境建置。
而金鑰跟憑證的部份跟前面一樣,由 Godaddy 給予的兩個檔案:fe461f1ba212ab7.crt 和 gd_bundle-g2-g1.crt
以及事先產生好的金鑰檔 my-private-key.key。

Error 'handshake alert: unrecognized_name'

參考資料
  1. SSL handshake alert: unrecognized_name error since upgrade to Java 1.7.0
  2. Error 'handshake alert: unrecognized_name' when setting up application links after upgrading Confluence

在全新的 Apache 2.4 設定 HTTPS

在完成跟 GoDaddy 申請憑證之後,Godaddy 網站上可以取得兩個 CRT 檔
我這邊拿到的,一個是命名很像亂碼的 fe461f1ba212ab7.crt 檔案,另一個則是 gd_bundle-g2-g1.crt。
fe461f1ba212ab7.crt 這個檔案是 SSL Certificate File,而 gd_bundle-g2-g1.crt 則是 SSL Certificate Chain File
加上申請憑證前,我們需要自行先產生的金鑰,假設檔名是 my-private-key.key
總共有三個檔案,就可以完成 Apache 2.4 的 HTTPS 設定了。

2016年10月18日 星期二

在 Docker 中安裝 Bugzilla

這篇是簡單紀錄 Bugzilla 的安裝流程,流程中會以 Docker 1.12.0 來部署需要的服務。
Bugzilla 官方提供的安裝文件可以參考 [1]。

2016年10月9日 星期日

GTX650 穩定性問題

本來在玩遊戲時,電腦會頻繁地跳出遊戲畫面,或者是遊戲程式崩潰等等
原先以為問題顯示器驅動程式停止回應
但即使在依照那些方式做了調整後,依然在某些遊戲中會遇到跳出的問題(只是不會有驅動程式停止回應的訊息)
後來又繼續查了一段時間後,發現 [1] 這篇文章
就照著文章最後說的,去調整 PCI-E 的版本,從 PCI-E 3.0 改為 PCI-E 2.0,就….好像是完全好了…..。
不確定結果問題是 EVGA 的顯示卡對 PCI-E 3.0 支援有異常,還是特定一群主機板晶片組對 PCI-E 3.0 支援都有問題
總之應該不用考慮要換顯卡了….。

PS. 我的主機板晶片是 H87M。

參考資料
  1. GTX 650 stability problem

2016年9月10日 星期六

Gson 基礎使用:序列化與反序列化時,使用不同的名稱

在利用 Gson 做自動序列化與反序列化時,有時會遇到有點特殊的需求
就是序列化與反序列化時,想要使用不同的名稱。
實務上比較直覺的狀況是,某個物件是要從資料庫取出的,然後要將物件內容透過 JSON 格式輸出給使用者
但是又不希望使用者可以直接從 JSON 格式看見資料庫的結構,因此會嘗試至少把名字換掉 XD
(雖然這個例子看起來好像只是鴕鳥心態就是了 XD)