2010-05-11 14 views
3

Lets considérer l'exemple de code suivant où un chemin et un seul paramètre sont codés ...UriBuilder encodant de manière incorrecte la valeur des paramètres de requête?

Nom du paramètre: "PARAM"

Valeur du paramètre: "foo/bar aaa = bbb & ccc = ddd" (se trouve être une URL avec des paramètres de la requête)

String test = UriBuilder.fromPath("https://dummy.com"). 
       queryParam("param", "foo/bar?aaa=bbb&ccc=ddd"). 
       build().toURL().toString(); 

La chaîne URL encodée retournée est:

"https://dummy.com?param=foo/bar?aaa%3Dbbb&ccc%3Dddd" 

est-t son correct?

Le caractère "&" ne doit-il pas être codé (et peut-être même "?") Dans la chaîne de valeur du paramètre?

Ne serait-pas l'URL produit être interprété comme suit:

Un premier paramètre, name = "PARAM", value = "? Ar aaa% 3Dbbb" suivi d'un second paramètre, name = "ccc% 3Dddd" , sans valeur.

+1

UriBuilder n'appartient pas à l'API Java standard AFAIK, qui est son package? – leonbloy

+0

Il est dans JAX-RS (API Java pour les services Web RESTful) – Fred

Répondre

1

Votre appel initial à "fromPath" devrait probablement être "fromUri". Cela étant dit ...

Est-ce correct?

Non, la sortie ne semble pas correcte.

ne devrait pas le caractère « & » (et peut encore « ? ») Est codé dans la chaîne de valeur du paramètre ?

Oui, cela devrait l'être.

Est-ce pas l'URL produit soit interprété comme suit:

Un premier paramètre, name = "PARAM", value = "ar aaa% 3Dbbb?" Suivi d'un second paramètre, name = "ccc% 3Dddd", sans valeur.

Le premier paramètre serait "foo/bar? Aaa = bbb", mais oui, vous interprétez correctement. Cela ressemble à un bug dans votre fournisseur javax.ws.rs.core.

+0

C'était en fait un bug de Jersey (http://java.net/jira/browse/JERSEY-533?focusedCommentId=15079&page=com.atlassian.jira.plugin .system.issuetabpanels% 3Acomment-tabpanel # action_15079) – fglez

+0

Wow, bon à savoir. Merci! –