Как сопоставить Spring @RequestMapping, имеющий @pathVariable, содержащий "/"? - PullRequest
14 голосов
/ 25 февраля 2010

Я делаю следующий запрос от клиента:

/search/hello%2Fthere/

, где поисковый термин "привет / там" был URL-кодирован.

На сервере я пытаюсь сопоставить этот URL, используя следующее сопоставление запроса:


@RequestMapping("/search/{searchTerm}/") 
public Map searchWithSearchTerm(@PathVariable String searchTerm) {
// more code here 
}

Но я получаю ошибку 404 на сервере, потому что у меня нет соответствия для URL. Я заметил, что URL декодируется до того, как Spring его получит. Поэтому пытается найти / поиск / привет / там, где нет совпадений.

Я нашел Jira, связанный с этой проблемой здесь: http://jira.springframework.org/browse/SPR-6780. Но я до сих пор не знаю, как решить мою проблему.

Есть идеи?

Спасибо

1 Ответ

25 голосов
/ 25 февраля 2010

Нет хороших способов сделать это (не имея дело с HttpServletResponse). Вы можете сделать что-то вроде этого:

@RequestMapping("/search/**")  
public Map searchWithSearchTerm(HttpServletRequest request) { 
    // Don't repeat a pattern
    String pattern = (String)
        request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);  

    String searchTerm = new AntPathMatcher().extractPathWithinPattern(pattern, 
        request.getServletPath());

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