2011-03-31 59 views
6

播放框架雙url編碼

本地主機:8080 ?/ API/V1 /用戶/鮑勃/ reset_password EMAIL_ADDRESS = 鮑勃%40bob.com

然後其他時間,我得到: 本地主機:8080/API/V1 /用戶/鮑勃/ reset_password EMAIL_ADDRESS = 鮑勃%2540bob.com

在第二個的@已被編碼一次,40%則%又被編碼爲%25所以你最終%2540

如果我什麼都不做多等一下問題就消失了,這讓我覺得這是某種緩存問題,但我似乎無法弄清楚它是什麼。

+0

您可以嘗試在http://groups.google.com/group/play-framework上詢問它們是否響應很快...... – opensas 2011-04-04 02:52:26

+0

已經做了,沒有迴應 – dstarh 2011-04-04 03:22:49

回答

4

終於被確認爲一個錯誤,並在以後的版本中得到修復

0

因爲這不排除所有的時間我不知道這是否會幫助,但你嘗試編碼的網址?例如: org.apache.commons.httpclient.util.URIUtil.encodeAll(url);

0

我認爲發生的事情是,當您第一次將符號作爲符號發送時調用控制器。

然後將其編碼到響應中並將@轉換爲%40。我猜你什麼時候回來,並且通過瀏覽器重新發送,%40中的%被編碼爲%25,使其成爲%2540。

對不起,如果上面有混淆,很難解釋。

簡單的答案是,在將它傳遞到WS類之前,只需將%40的emailAddress變量替換爲@即可。在play框架中還有一個urlDecode()方法可以實現,我之前使用過play,但是我沒有使用這個方法。

+0

也許這就是問題,但我希望它每次都發生或根本不會發生 - 同樣,當我檢查電子郵件時,它不會被編碼並且具有相同的問題,即使它是直接硬編碼的在課堂裏。 – dstarh 2011-04-21 16:03:27

+0

最簡單的確認方法是在構建URL之後添加打印/日誌語句,打印並觀察發生的情況。 – grahamrb 2011-04-21 21:09:48

0

我懷疑某種形式的URL重寫。你有沒有在你的服務器前運行的Apache Web服務器?也許一些RewriteRule缺少[NE]標誌。