如何更改Spring MVC处理url’dot’字符的行为

我正在尝试将一个Web项目从Jersey迁移到Spring MVC 3.0。 这个过程非常简单,直到我开始使用点符号迁移应该处理URL的控制器:“/ myApp / resources / create / root.subFolder1 ”。 Spring MVC似乎无耻地从URL中删除了“.subFolder1”部分,它发生在框架代码内部(参见AbstractUrlHandlerMapping类)

uriTemplateVariables.putAll(getPathMatcher().extractUriTemplateVariables(matchingPattern, urlPath)); 

所以我的控制器方法是用root path参数调用的,而不是root.subFolder1

我真的想找到一种方法来自定义这种行为。 有什么建议吗?

PS。 要求有点保持现有的URL结构,即切换到查询参数“/ myApp / resources / create / ?path = root.subFolder1 ”的变通方法,我无法考虑。

PS。 我的Spring配置看起来像

      

尝试这个:

    

这应该使Spring不会尝试解析扩展。

另请参见: Spring MVC @PathVariable被截断

并且: Spring文档

潜在的配置文件:

web.xml(我设置servlet的东西)

  Spring MVC Dispatcher Servlet org.springframework.web.servlet.DispatcherServlet   contextConfigLocation  /WEB-INF/spring/*.xml,classpath*:applicationContext.xml,classpath*:restApplicationContext.xml   2  

然后在WEB / INF / spring / mvc-config.xml中我有这样的东西:

       

在某些情况下可能更容易的另一种可能性是在URL的末尾添加尾部/

所以你的URL将是/myApp/resources/create/root.subFolder1/

这在我的应用程序中使用Spring MVC 3.1。

为了

   

工作你必须删除/注释掉

   

和任何其他mvc:配置定义为它们覆盖您的自定义bean声明。

这是一个婊子。 我们团队中的一个人在周末开始工作。 我们打算用下划线但他得到了它。 他从控制器类属性中删除了@Controller,并为该类留下了@RequestMapping空白。 在Http get和put的公共方法上,他将“/2.0/”添加到@RequestMapping。 以下示例。

 @RequestMapping public class EndpointController { @RequestMapping(value="/2.0/endpoint", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE, produces=MediaType.APPLICATION_JSON_VALUE) public ResponseEntity create( @Valid @RequestBody EndpointView endpointParams, HttpServletRequest request ) 

大家好运。 这个问题很糟糕。

我和Robert Beltran几乎一样,但是我给了class级留下了@Controller注释。 重要的是将“/1.0/”放在方法的@RequestMapping上,而不是在类注释中。
我的例子:

 @Controller @RequestMapping("") public class ClientApi { private final String API_PREFIX = "/api/1.0/client"; @RequestMapping(value = API_PREFIX + "/{clientId}", method = RequestMethod.GET) @ResponseBody public ClientDetailsImpl get(@PathVariable String clientId) { // my code } } 

上面的答案应该是正确的,但一定要从XML配置中删除 ,否则bean定义会被注释驱动标记的一部分推翻。

请参阅java文档以及删除此便捷标记时所遗漏的所有配置的源代码 。