J'essaie de trouver le meilleur moyen de contourner une faille de conception dans une application Web que j'aide. Une partie du service passe un paramètre ("myparam") à une page .jsp, qui à son tour appelle un service REST incluant notre myparam comme paramètre de chemin. Le bit de défaut de conception est que myparam doit être passé en tant que paramètre de formulaire, car il peut s'agir de texte libre. Cependant, nous ne pouvons pas modifier la mise en œuvre car d'autres parties sont impliquées dans l'extension .jsp. Ma solution était de coder le myparam en utilisant le codage hexadécimal (le codage d'URL seul ne fonctionne pas car vous finissez par "%" etc. que l'implémentation org.restlet de REST n'aime pas voir dans les paramètres de chemin). Utilisation de la bibliothèque Apache codec, j'ai quelque chose comme ceci:Codage/décodage des paramètres du chemin REST
Option 1 (juste hex):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray()));
qui fonctionne pour nos besoins. Ce que je voulais vraiment faire était de combiner URL- et Hex-encodage, pour que je puisse vraiment couvrir tous les posibilités:
Option 2 (hex + url-décodage):
Préparation des paramètres:
String workText = URLEncoder.encode(inText, encoding); // a
char[] encodedBytes = Hex.encodeHex(workText.getBytes()); // b
String myparam = new String(encodedBytes);
décodage (REST):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray())); // c
String doubleDecodedParam = URLDecoder.decode(decodedParam, "UTF-8"); // d
J'ai deux questions:
Pourquoi la deuxième option ne fonctionne-t-elle pas? (à chaque fois que j'essaie de décoder ma chaîne en d), j'obtiens une exception java.lang.IllegalArgumentException). J'ai testé le double encodage et décodage de mes valeurs de paramètres à http://ostermiller.org/calc/encode.html sans problème.
Y at-il un meilleur moyen de coder les paramètres de chemin avec REST?
1. Où obtenez-vous l'exception IllegalArgumentException? Toute trace de pile? Au moins le point où l'exception est levée? –