Play Framework, двойное кодирование URL - PullRequest
6 голосов
/ 01 апреля 2011

с учетом следующего метода контроллера, где 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 получает:

локальный: 8080 / API / v1 / пользователей / боб / reset_password email_address = боб% 40bob.com

?

потом я получаю: локальный: 8080 / API / v1 / пользователей / боб / reset_password email_address = боб% 2540bob.com

?

На втором @ был один раз закодирован в% 40, затем% был снова закодирован в% 25, ​​так что в итоге вы получили% 2540

Если я ничего не делаю, только подожду минуту, проблема исчезнет, ​​что заставит меня думать, что это какая-то проблема с кэшированием, но я не могу понять, что это такое.

Ответы [ 4 ]

4 голосов
/ 28 мая 2011

наконец был признан ошибкой и был исправлен в более позднем выпуске

0 голосов
/ 21 апреля 2011

Я думаю, что происходит, когда вы вызываете контроллер в первый раз, когда отправляете символ at как символ at.

Затем он кодируется в ответ, а символ @ преобразуется в% 40.Я предполагаю, что когда вы получаете это обратно и повторно отправляете его через браузер,% в% 40 кодируется в% 25, ​​что делает его% 2540.

Извините, если вышеприведенное сбивает с толку, это трудно объяснить.

Простой ответ - просто заменить переменную emailAddress% 40 на @ перед передачей ее в класс WS.В структуре воспроизведения также есть метод urlDecode (), который может помочь, я уже использовал play, но не использовал этот метод.

0 голосов
/ 27 мая 2011

Я подозреваю некоторую форму переписывания URL.У вас есть веб-сервер Apache, работающий перед вашим сервером?Возможно, у некоторых RewriteRule отсутствует флаг [NE].

0 голосов
/ 06 апреля 2011

, поскольку это не выдает все время, я не знаю, поможет ли это, но вы пытались закодировать URL? например : org.apache.commons.httpclient.util.URIUtil.encodeAll (URL);

...