Как сопоставить 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());
...
}