如何匹配包含“/”的@pathVariable的Spring @RequestMapping?

时间:2010-02-25 14:44:12

标签: java spring spring-mvc

我正在做客户的以下请求:

/search/hello%2Fthere/

搜索词“hello / there”已经过网址编码。

在服务器上,我尝试使用以下请求映射匹配此URL:


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

但我在服务器上收到错误404,因为我没有任何匹配的URL。我注意到在Spring获取之前解码了URL。因此,尝试匹配/ search / hello /那里没有任何匹配。

我在这里找到了与此问题相关的Jira:http://jira.springframework.org/browse/SPR-6780。但我仍然不知道如何解决我的问题。

有什么想法吗?

由于

2 个答案:

答案 0 :(得分:25)

没有好的方法(没有处理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());

    ...
}

答案 1 :(得分:0)

    @Configuration
    public class AdditionalWebConfig extends WebMvcConfigurationSupport {
     .......
     ...........
     ...........
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer 
    configurer) {
       configurer.favorPathExtension(false);
    }
    .......
    .......
  }

,然后在@PathVariable(“ user / {username:。+}”)中添加这样的正则表达式