Как соответствовать Spring @RequestMapping, имеющему @pathVariable, содержащий “/”?

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

/search/hello%2Fthere/

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

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


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

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

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

Какие-либо идеи?

Спасибо

14
задан skaffman 25 February 2010 в 20:37
поделиться

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());

    ...
}
25
ответ дан 1 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: