给出以下控制器方法,其中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
如果我只是等待一分钟,问题就会消失,这让我觉得这是一种缓存问题,但我似乎无法弄清楚它是什么。
答案 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]
标记。