Spring MVC请求映射处理程序方法中{id:.+}的含义是什么?

 色花君子fds_181 发布于 2023-02-11 14:07

我在控制器中遇到了一个方法.这个id是什么:.+ ??

@RequestMapping(value="/index/{endpoint}/{type}/{id:.+}", method=RequestMethod.POST, consumes=kContentType, produces=kProducesType)
@ResponseBody
public String indexData(@PathVariable(value="endpoint") String endpoint, @PathVariable(value="type") String type, @PathVariable(value="id") String id, @RequestBody String body, HttpServletRequest request) {
    logger.debug("In web controller for endpoint " + endpoint);
    return indexController.indexData(endpoint, type, id, body,  getSecurityContextProvider(request));
}

reblace.. 27

spring MVC控制器请求映射中的路径变量的语法是{variable_name:regular_expression}.您可以选择省略正则表达式,这会导致您经常看到的内容{id}.

因此,对于示例/index/{endpoint}/{type}/{id:.+},变量名称是id正则表达式.+(参见下面对spring docs的引用).

正则表达式.+表示"匹配元字符.一次或多次".'.' 元字符表示包括空格的任何字符(尽管某些实现与新行不匹配).请参见http://en.wikipedia.org/wiki/Regular_expression

正则表达式用于帮助Spring确定变量的值,因为你可以有复杂的变量名,或者在路径的末尾可能还有其他重要信息,如果Spring刚说"go",它们会被吸入变量值直到路径的末尾"(例如文件名扩展名或路径变量).

在您的示例中,id变量可能包含特殊字符,否则会导致Spring过早终止变量.我在尝试使用包含文件扩展名的文件名(foobar.jpg)之前遇到过这个问题.Spring只返回变量的"foobar"部分,因为Spring假设我希望它在句点分隔符处终止变量值.因此,在这种情况下,为了确保"id"与完整值匹配,您将使用告诉Spring的正则表达式继续并匹配最后一个正斜杠和路径末尾之间的所有内容.SO参考:Spring MVC @PathVariable被截断

以下是处理复杂变量匹配的Spring文档的摘录:

有时您需要更精确地定义URI模板变量.考虑URL"/spring-web/spring-web-3.0.5.jar".你如何将其分解为多个部分?

@RequestMapping批注支持在URI模板变量中使用正则表达式.语法是{varName:regex},其中第一部分定义变量名称,第二部分定义正则表达式."

这是他们(相当复杂)的例子:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}")
public void handle(@PathVariable String version, @PathVariable String extension) {
    // ...
}

资料来源:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html

它们提供的示例显示了如何执行从请求到控制器方法参数的复杂映射,如果不使用正则表达式,则无法执行这些映射.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有