2011-03-31 21 views
6

dado el siguiente método controlador donde nombre de usuario = Bob y emailAddress = [email protected]Marco de Juego doble url codificación

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

      String url = BASE_URL + "https://stackoverflow.com/users/" + username + "/reset_password"; 

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

veces cuando hago la llamada, el endpoing url recibe:

localhost: 8080 ?/api/v1/usuarios/bob/reset_password email_address = bob% 40bob.com

continuación, otras veces me sale: localhost: 8080/api/v1/usuarios/bob/reset_password email_address = bob% 2540bob.com

En la segunda, la @ se ha codificado una vez al 40%, entonces el% fue codificado de nuevo al 25% por lo que terminan con% 2540

Si no hago nada más que espere un minuto, el problema desaparece, lo que me hace pensar que se trata de algún tipo de problema de almacenamiento en caché, pero parece que no puedo descifrar cuál es.

+0

usted podría intentar pedir que al http://groups.google.com/group/play-framework, son muy sensibles ... – opensas

+0

ya lo hizo, no hay respuesta – dstarh

Respuesta

4

finalmente se ha reconocido como un error y se ha resuelto en una versión posterior

0

ya que esto no repeduce todas las veces que no sé si eso ayudará pero ¿trataste de codificar la URL? por ejemplo: org.apache.commons.httpclient.util.URIUtil.encodeAll (url);

0

Creo que lo que está sucediendo es cuando llamas al controlador la primera vez que envías el símbolo at como símbolo.

Esto luego se codifica en la respuesta y @ se convierte a% 40. Supongo que cuando recuperes esto y lo vuelves a enviar a través del navegador, el% en el% 40 se codifica en% 25, ​​lo que lo convierte en% 2540.

Lo siento si lo anterior es confuso, es difícil de explicar.

La respuesta simple sería simplemente hacer un reemplazo en la variable emailAddress de% 40 a @ antes de pasarlo a la clase WS. También hay un método urlDecode() en el marco de juego que puede hacer el truco, he usado el juego antes pero no he usado este método.

+0

Tal vez ese sea el problema, sin embargo, esperaría que sucediera siempre o no. Además, cuando inspeccionaba el correo electrónico, no se codificaba y tenía el mismo problema, incluso si estaba codificado directamente. en la clase. – dstarh

+0

La manera más fácil de confirmar sería agregar una declaración de impresión/registro justo después de construir la URL, imprimir eso y ver lo que sucede. – grahamrb

0

Sospecho que hay alguna forma de reescritura de URL. ¿Tiene un servidor web Apache ejecutándose frente a su servidor? Tal vez RewriteRule falta la bandera [NE].

Cuestiones relacionadas