2014-11-10 3 views
0

У меня есть служба REST GET, которая принимает параметры запроса, такие как имя и фамилия, и возвращает результаты на основе этого. Служба должна поддерживать как точный, так и подстановочный поиск. Если поиск подстановочных знаков должен быть запущен, клиент может передать * как запись с использованием дикой карты. Например, он хочет, чтобы все пользователи, чье имя начинается с Мура, он передаст firstName = mur *.Передача закодированного * в параметре запроса REST

Поскольку вы не можете передать * в строке запроса, они должны передать кодированное значение URL *, которое равно% 2A. Проблема даже в том случае, если закодированное значение отправлено, служба выдает ошибку

org.springframework.web.util.NestedServletException: обработка запроса не удалась; вложенное исключение java.util.regex.PatternSyntaxException: Висячие мета-символ '*' рядом с индексом 0

я пройти: (% 3A) или & (% 26), и она успешно работает, почему * символ не читается.

Я тестирую службу с помощью POSTMAN rest cleint, а также SOAPUI, и обе ошибки вызывают такую ​​же ошибку. Это проблема с весной?

Спасибо за помощь! Татха

ответ

2

Из сообщения об ошибке, я думаю, вы используете (сознательно или нет) один из регулярных выражений функций, такие, как любой метод в Pattern, String.matches(), String.replaceAll() или аналогичном, чтобы проверить, если имя совпадает с шаблоном, переданным в качестве параметр.

В результате ваш шаблон должен следовать синтаксис регулярных выражений, в которых «любое имя, начинающееся с mur» должно быть выражено в виде mur.* (обратите внимание на точку), не mur*. Если вы передаете звездочку * в качестве единственного символа, это приводит к недействительному регулярному выражению, следовательно, к ошибке.

Сообщение об ошибке java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 Очевидно, sugegsts мы имеем дело с регулярным выражением и что оскорбительная звездочка является первым символом в строке (индекс 0).

Итак, если приведенное выше значение истинно, вам необходимо передать запрос в синтаксисе regex или изменить способ сопоставления имен с шаблоном в соответствии с синтаксисом, который вы хотите использовать.

+0

С благодарностью @ michał-kosmulski за ответ. Я использовал String.replaceAll («*»), чтобы заменить символ подстановки на пустое место и вызвать поиск подстановочных знаков в LDAP. Я буду проверять. *. Благодаря тонну!!! – Tatha

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