Spring MVC 3 RequestMapping с квантификаторами регулярных выражений - PullRequest
3 голосов
/ 18 февраля 2011

Приведенный ниже метод завершается с ошибкой «PatternSyntaxException: Незакрытое счетное закрытие рядом с индексом ...»

@RequestMapping(value ="/{id:[0-9|a-z]{15}}")
public View view(@PathVariable final String id) {
  ...
}

Похоже, что сопоставитель шаблонов слишком сильно обрезает строку и теряет последнюю}.

Кто-нибудь знает обойти эту ошибку?Мне нужно сбросить квалификатор в "/ {id: [0-9 | az] +}" - что откровенно отстой!

Ответы [ 2 ]

6 голосов
/ 18 февраля 2011

Вот решение. Это неприятно, но это эквивалентно тому, что вы хотели бы получить:

@RequestMapping(value = "/{id:[0-9a-z][0-9a-z][0-9a-z][0-9a-z]" +
        "[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]" +
        "[0-9a-z][0-9a-z][0-9a-z][0-9a-z]}") // 15 repetitions of [0-9a-z]

Если это единственный способ получить то, что вам нужно, вы также можете использовать этого монстра.

5 голосов
/ 18 февраля 2011

Я не думаю, что есть какие-либо хорошие обходные пути для этого случая, кроме проверки вручную. В конце концов, синтаксис {name:regexp} был введен для решения неоднозначностей между отображениями, а не для проверки.

@Valid на @PathVariable s может быть решением, но оно обещано только весной 3.1 ( SPR-6380 ).

Также не стесняйтесь сообщать об этой ошибке в Spring JIRA , хотя я не ожидаю, что они исправят ее быстро, поскольку код обработки переменных пути уже беспорядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...