56 votes

Comment encoder les valeurs des paramètres URI?

Je veux envoyer un URI comme la valeur d'une requête/matrice paramètre. Avant que je puisse l'ajouter à une URI, j'ai besoin de coder selon la RFC 2396. Par exemple, compte tenu de l'entrée:

http://google.com/resource?key=value1 & value2

Je m'attends à la sortie:

http%3a%2f%2fgoogle.com%2fresource%3fkey%3dvalue1%2520%26%2520value2

Ni java.net.URLEncoder ni java.net.URI va générer la sortie droite. URLEncoder est destinée au formulaire HTML de codage qui n'est pas la même que la RFC 2396. URI n'a pas de mécanisme pour le codage d'une valeur unique à un moment donc il n'a aucun moyen de savoir que valeur1 et valeur2 sont partie de la même clé.

30voto

Peter Štibraný Points 17507

Jersey UriBuilder code URI composants à l'aide de l'application/x-www-form-urlencoded et RFC 3986 en tant que de besoin. Selon la Javadoc

Générateur de méthode contextuelle de l'encodage des caractères non autorisés dans l'URI de la composante suivant les règles de l'application/x-www-form-urlencoded type de support pour les paramètres de la requête et de la RFC 3986 pour tous les autres composants. Notez que seuls des caractères non autorisés dans un composant particulier sont soumis à l'encodage, par exemple, un chemin d'accès fourni à l'un de la chemin de méthodes peut contenir des paramètres de matrice ou de plusieurs segments du chemin depuis les séparateurs sont des caractères et ne sera pas codé. Pour cent codé valeurs sont également comptabilisés lorsque cela est autorisé et ne sera pas en double codé.

19voto

Adam Gent Points 15055

Vous pouvez également utiliser UriUtils Spring

9voto

yincrash Points 2344

Je n'ai pas assez de réputation pour commenter les réponses, mais je voulais simplement noter que le téléchargement de l'API JSR-311 en tant que tel ne fonctionnera pas. Vous devez au moins télécharger l'implémentation de référence ( maillot ).

Le téléchargement de l’API à partir de la page JSR vous donnera simplement une exception ClassNotFoundException lorsque l’API essaie de rechercher une implémentation au moment de l’exécution.

4voto

Daniel Murphy Points 518

J'ai écrit le mien, c'est court, super simple, et vous pouvez le copier si vous voulez: http://www.dmurph.com/2011/01/java-uri-encoder/

2voto

Peter Štibraný Points 17507

Il semble que CharEscapers de Google GData-java-client a ce que vous voulez. Il a la méthode uriPathEscaper, uriQueryStringEscaper et uriEscaper générique. (Tous retournent un objet Escaper qui fait une fuite réelle). Licence Apache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X