Как сопоставить Spring @RequestMapping с атрибутом @pathVariable, содержащим "/"?

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

/search/hello%2Fthere/

где поисковый термин "hello/there" был URLencoded.

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


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

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

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

Любые идеи?

Спасибо

Ответы

Ответ 1

Нет никаких хороших способов сделать это (не имея дело с 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());

    ...
}