2011-03-31 93 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]标志。