Я пытаюсь найти лучший способ обойти недостатки дизайна в веб-приложении, которое я поддерживаю. Одна часть службы передает параметр («myparam») на страницу .jsp, которая, в свою очередь, вызывает службу REST, включая наш myparam в качестве параметра пути. Конструктивный недостаток состоит в том, что myparam следует передавать как параметр формы, поскольку он может быть свободным текстом. Однако мы не можем изменить реализацию, поскольку другие стороны вовлечены в конец .jsp.Кодирование/декодирование Параметры пути REST
Мое решение заключалось в кодировании myparam с использованием шестнадцатеричного кодирования (только кодирование URL-адреса не работает, поскольку вы заканчиваете «%» и т. Д., Что реализация REST в org.restlet не нравится в параметрах пути). Использование библиотеки Apache кодек, у меня есть что-то вроде этого:
Вариант 1 (только шестигранный):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray()));
, которая работает для наших целей. То, что я действительно хотел сделать, чтобы объединить url- и Hex-кодирование, так что я действительно могу охватить все:
максимальными возможностямиВариант 2 (шест + URL-декодирование): подготовка
Параметр:
String workText = URLEncoder.encode(inText, encoding); // a
char[] encodedBytes = Hex.encodeHex(workText.getBytes()); // b
String myparam = new String(encodedBytes);
Декодирование (REST):
String decodedParam = new String(Hex.decodeHex(myparam.toCharArray())); // c
String doubleDecodedParam = URLDecoder.decode(decodedParam, "UTF-8"); // d
у меня есть два вопроса:
Почему не работает второй вариант? (всякий раз, когда я пытаюсь и URL-декодировать мою строку в d), я получаю java.lang.IllegalArgumentException). Я протестировал двойное кодирование и декодирование значений моих параметров на http://ostermiller.org/calc/encode.html без проблем.
есть ли лучший способ кодирования параметров пути с помощью REST?
1. Где вы получаете исключение IllegalArgumentException? Любой стек? По крайней мере, точка, в которой выбрано исключение? –