Encodage/décodage RESTE du chemin paramètres

Je suis en train d'essayer de trouver la meilleure façon de contourner ce défaut de conception d'application web, je suis d'aider à l'appui. Une partie du service transmet un paramètre ("myparam") à la une .page jsp, qui appelle à son tour un service REST, y compris notre myparam comme un paramètre de chemin d'accès. Le défaut de conception peu, c'est que myparam doit être passé comme un paramètre de formulaire, car il peut être en texte libre. Cependant, nous ne pouvons pas changer la mise en œuvre que d'autres parties sont impliquées à la .jsp fin des choses.

Ma solution a été de coder le myparam à l'aide de codage hexadécimal (le codage d'url à lui seul ne fonctionne pas comme vous jusqu'à la fin avec "%" etc. qui le org.restlet mise en œuvre de REPOS n'aime pas à voir en chemin paramètres). À l'aide de l'Apache bibliothèque de codec, j'ai quelque chose comme ceci:

Option 1 (juste hex):

String decodedParam = new String(Hex.decodeHex(myparam.toCharArray()));

qui fonctionne pour nos fins. Ce que je voulais vraiment faire était de combiner URL - et Hex-encodage, afin que je puisse réellement répondre à toutes les posibilités:

Option 2 (hex + adresse url de décodage):

Paramètre préparation:

String workText = URLEncoder.encode(inText, encoding); //a
char[] encodedBytes = Hex.encodeHex(workText.getBytes()); //b
String myparam = new String(encodedBytes);

De décodage (REPOS):

String decodedParam = new String(Hex.decodeHex(myparam.toCharArray())); //c
String doubleDecodedParam = URLDecoder.decode(decodedParam, "UTF-8"); //d

J'ai deux questions:

  1. pourquoi ne pas la deuxième option travail? (chaque fois que j'essaie et URL-décoder ma chaîne à d), je reçois un java.lang.IllegalArgumentException). J'ai testé le double-codage et décodage de mes valeurs de paramètre au http://ostermiller.org/calc/encode.html sans problème.

  2. est-il une meilleure façon de coder chemin de paramètres avec le RESTE?

  • 1. Où obtenez-vous l'IllegalArgumentException à? Tout stacktrace? Au moins du point où l'exception est levée?
InformationsquelleAutor davek | 2009-09-28