Play Framework双网址编码

时间:2011-03-31 20:36:29

标签: java urlencode playframework

给出以下控制器方法,其中username = bob和emailAddress = bob@bob.com

    public static void resetPassword(String username, String emailAddress) {

            String url = BASE_URL + "/users/" + username + "/reset_password";

            HttpResponse response = WS.url(url).setParameter("email_address", emailAddress).get();
}

有时当我拨打电话时,url endpoing会收到:

本地主机:8080 / API / V1 /用户/鲍勃/ reset_password EMAIL_ADDRESS = 鲍勃%40bob.com

然后我得到: 本地主机:8080 / API / V1 /用户/鲍勃/ reset_password EMAIL_ADDRESS = 鲍勃%2540bob.com

在第二个上,@已被编码一次到%40,然后%再次被编码为%25,所以你最终得到%2540

如果我只是等待一分钟,问题就会消失,这让我觉得这是一种缓存问题,但我似乎无法弄清楚它是什么。

4 个答案:

答案 0 :(得分:4)

最终被认为是一个错误,并已在以后的版本中修复

答案 1 :(得分:0)

因为这不会一直重复我不知道这是否会有所帮助,但你是否尝试对网址进行编码?例如 : org.apache.commons.httpclient.util.URIUtil.encodeAll(URL);

答案 2 :(得分:0)

我认为当您第一次将at符号作为符号发送时调用控制器时会发生什么。

然后将其编码到响应中,并将@转换为%40。我猜你什么时候回来,然后你通过浏览器重新发送它,%40中的%被编码为%25,使得%2540。

对不起,如果上述情况令人困惑,很难解释。

简单的答案是在将%40的emailAddress变量替换为@之前将其传递给WS类。在游戏框架中还有一个urlDecode()方法可以解决问题,我之前使用过游戏,但我还没有使用过这种方法。

答案 3 :(得分:0)

我怀疑某种形式的网址重写。您是否在服务器前运行了Apache Web Server?也许有些RewriteRule缺少[NE]标记。