春季MVC@PathVariable被截断

2022-08-31 07:50:14

我有一个控制器,它提供对信息的 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?


答案 1

尝试参数的正则表达式:@RequestMapping

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

答案 2

这可能与SPR-6164密切相关。简而言之,该框架尝试将一些智能应用于URI解释,删除它认为是文件扩展名的内容。这将具有变成 的效果,因为它认为 是一个文件扩展名。blah2010.08.19-02:25:47blah2010.08.19-02:25:47

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