Spring MVC @PathVariable被截断怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

我有一个控制器,可以提供对RESTful信息的访问:

@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName}")
public ModelAndView getBlah(@PathVariable String blahName, HttpServletRequest request,
                            HttpServletResponse response) {

我遇到的问题是,如果我用具有特殊字符的路径变量来访问服务器,它将被截断。例如: http:// localhost:8080 / blah-server / blah / get / blah2010.08.19-02:25:47

参数blahName将是blah2010.08

但是,对request.getRequestURI()的调用包含传入的所有信息。

任何想法如何防止截断@PathVariable的Spring?

提问于
用户回答回答于

这可能与SPR-6164密切相关。简而言之,框架试图将一些智能应用于URI解释,去除它认为是文件扩展名的东西。这将有转向的效果blah2010.08.19-02:25:47blah2010.08,因为它认为.19-02:25:47是一个文件扩展名。

如链接问题中所述,可以通过DefaultAnnotationHandlerMapping在应用上下文中声明自己的bean并将其useDefaultSuffixPattern属性设置为禁用此行为false。这将覆盖默认行为,并停止它骚扰您的数据。

用户回答回答于

控件的正则表达式。@RequestMapping论点:

RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")

扫码关注云+社区