2015-03-17 3 views
0

Я пытаюсь передать строку поиска из переднего конца javascript в java-контроллер, который обращается к другому api.URLDecoder.decode не работает как ожидалось

Все работает, за исключением строки со специальными символами ex "test + 123".

Я исправил это с помощью кодирования/декодирования, чтобы попытаться решить эту проблему. Я использую комбинацию JavaScript encodeURIComponent() (http://www.w3schools.com/jsref/jsref_encodeuricomponent.asp) и Java раскодирования URL-адресов (http://download.java.net/jdk7/archive/b123/docs/api/java/net/URLDecoder.html#decode(java.lang.String,%20java.lang.String))

Кроме того, я смотрел на это: Java - URLDecoder.decode(String s) vs URLDecoder.decode(String s, String enc)

они используют "utf8" (UrlDecoder.decode (строка, "utf8 ");)

Я проверил только с помощью только код javascript, который превращает мою строку« test + 123 »во что-то, что подтягивает кучу правильных результатов.

Мой регистратор заявляет, что поиск правильной строки поиска выполняется.

Ex "тест + 123": Без кодирования Javascript -> "Тест 123"

С помощью JavaScript закодировать -> "тест + 123"

С Java декодировании -> Нет результата?

код My Javascript выглядит следующим образом:

var encodedString=encodeURIComponent($("#search-input").val()); 

Мой Java код выглядит следующим образом:

String result = URLDecoder.decode(encodedSearchString,"utf8"); 

Я проверил отладчик и мой регистратор правильно, encodedSearchString не кодируется.

Что происходит?

Я еще не написал никакого другого кода, относящегося к кодированию или декодированию, я не вижу, что это происходит где-либо еще в коде. Я использую spring mvc, maven, и intellj если это имеет значение.

ответ

0

Решение:

Интересная причина, почему это не возвращал правильные результаты, является сама технология стек.

Spring MVC содержит свой собственный декодер, который включается автоматически (она должна быть отключена вручную) см http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

Цитаты из выше ссылки «urlDecode Defaults истины, так как в Spring 2.5. Если вы хотите сравнить закодированными paths, установите для этого флага значение false. Однако HttpServletRequest всегда предоставляет путь сервлетов в декодированной форме. Имейте в виду, что путь сервлета не будет соответствовать по сравнению с закодированными путями ».

Существовало по существу что-то под этим не было явно закодировано.Таким образом, декодирование строк сообщений не требуется.

0

Возможно, синтаксис должен быть UTF-8 вместо utf8?

Строковый результат = URLDecoder.decode (encodedSearchString, "UTF-8");

+0

Я попытался сыграть с utf, а также использовать устаревший .decode (string), чтобы устранить эту переменную :(К сожалению, это не проблема. – Tai

Смежные вопросы