如何更改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文档以及删除此便捷标记时所遗漏的所有配置的源代码 。