使用 @PathVariable 解决 Spring MVC 中截断的路径变量
问题:
使用时Spring MVC 与 @PathVariable 用于 RESTful API 开发,已观察到包含特殊字符的路径变量被截断。具体来说,当提供像“blah2010.08.19-02:25:47”这样的路径变量时,@PathVariable 仅捕获第一个句点之前的部分(即“blah2010.08”)。
原因:
默认情况下,Spring MVC 将 @PathVariable 参数视为简单字符串,并期望它们遵循某些 URL 参数格式规则。这些规则包括对路径变量中允许的字符的限制,其中句点和连字符等特殊字符被解释为值分隔符。因此,Spring 在第一个无效字符处截断路径变量。
解决方案:
为了防止 Spring 截断 @PathVariable 值,有必要显式地指定参数应该接受更广泛的字符范围。这可以通过在 @RequestMapping 注解中使用正则表达式来实现。
例如,要允许路径变量包含句点、连字符和其他特殊字符,可以使用以下正则表达式:
@RequestMapping(method = RequestMethod.GET, value = Routes.BLAH_GET + "/{blahName:.+}")
正则表达式中的“.”后缀表示 {blahName} 路径变量应匹配任何非空字符串,从而有效捕获所提供路径中的所有字符。
以上是如何在 Spring MVC @PathVariable 中处理带有特殊字符的截断路径变量?的详细内容。更多信息请关注PHP中文网其他相关文章!