Я думаю, в названии сказано все: я ищу способ проанализировать String, содержащую часть тела HTTP-запроса multipart/form-data. Т.е. содержимое строки будет выглядеть примерно так:
Код: Выделить всё
--xyzseparator-blah
Content-Disposition: form-data; name="param1"
hello, world
--xyzseparator-blah
Content-Disposition: form-data; name="param2"
42
--xyzseparator-blah
Content-Disposition: form-data; name="param3"
blah, blah, blah
--xyzseparator-blah--
Код: Выделить всё
parameters.get("param1"); // returns "hello, world"
parameters.get("param2"); // returns "42"
parameters.get("param3"); // returns "blah, blah, blah"
parameters.keys(); // returns ["param1", "param2", "param3"]
- Было бы лучше, если бы мне не приходилось это делать укажите разделитель (т. е. xyzseparator-blah в данном случае), но я могу с этим смириться, если понадобится.
- Я ищу решение на основе библиотеки, возможно, из основной библиотеки потоков (например, «Apache Commons» или что-то подобное).
- Хочу избежать накатывания собственного решения, но на данном этапе, боюсь, мне придется. Причина: хотя приведенный выше пример кажется тривиальным для разделения/анализа с некоторыми манипуляциями со строками, реальные тела составных запросов могут иметь гораздо больше заголовков. Кроме того, я не хочу заново изобретать (а тем более заново тестировать!) велосипед
Если бы существовало решение, которое удовлетворяет вышеуказанным критериям, но входные данные которого представляют собой Apache HttpRequest вместо строки, это было бы тоже приемлемо.
(По сути, я получаю HttpRequest, но используемая мной собственная библиотека построена таким образом, что она извлекает тело этого запроса в виде строки и передает его классу, ответственному за Однако при необходимости я мог бы также работать непосредственно с HttpRequest.)
Вопросы по теме
Неважно как я пытаюсь найти ответ через Google, здесь, на SO, а также на других форумах, кажется, что решение всегда состоит в том, чтобы использовать загрузку файла Commons для просмотра частей. Например: здесь, здесь, здесь, здесь, здесь...
Однако метод parseRequest, используемый в этом решении, ожидает RequestContext, которого у меня нет (только HttpRequest).
Другой способ, также упомянутый в некоторых из приведенных выше ответов, — это получение параметров из HttpServletRequest (но опять же, у меня есть только HttpRequest).
EDIT: Другими словами: я мог включить Commons Fileupload (у меня есть доступ к нему), но это мне не поможет, потому что у меня есть HttpRequest, а для загрузки файлов Commons требуется RequestContext. (Если только не существует простого способа преобразования HttpRequest в RequestContext, который я пропустил.)
Подробнее здесь: https://stackoverflow.com/questions/484 ... dy-in-java