gpt4 book ai didi

spring - Spring MVC requestmapping handler方法中的{id :. +}是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 13:50:10 27 4
gpt4 key购买 nike

我在 Controller 中遇到了一个方法。这个 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));
}

最佳答案

spring MVC Controller 请求映射中路径变量的语法是{variable_name:regular_expression}。您可以选择省略正则表达式,这会导致您更频繁地看到 {id}

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

正则表达式 .+ 表示“匹配元字符 . 一次或多次”。这 '。'元字符表示包括空格在内的任何字符(尽管某些实现不匹配换行符)。见 http://en.wikipedia.org/wiki/Regular_expression

正则表达式用于帮助 Spring 确定变量的值,因为您可以有复杂的变量名称,或者路径末尾可能有其他重要信息,否则如果 Spring 只是说“一直到路径的末尾”(例如文件扩展名或路径变量)。

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

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

Sometimes you need more precision in defining URI template variables. Consider the URL "/spring-web/spring-web-3.0.5.jar". How do you break it down into multiple parts?

The @RequestMapping annotation supports the use of regular expressions in URI template variables. The syntax is {varName:regex} where the first part defines the variable name and the second - the regular expression."

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

@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

他们提供的示例展示了如何执行从请求到 Controller 方法参数的复杂映射,如果不使用正则表达式,您将无法做到。

关于spring - Spring MVC requestmapping handler方法中的{id :. +}是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20527321/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com