购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2.1 请求映射

@RequestMapping是Spring MVC中的核心注解,用于将请求路径映射到特定的控制器方法。它具有多个属性,使得处理器方法能够只响应满足特定条件的请求。表2-2列出了@RequestMapping注解的主要属性及其用法。

表2-2 @RequestMapping的主要及其用法属性

@RequestMapping提供了灵活的URL匹配机制,允许通过多种方式指定请求与处理器方法间的映射关系。在实践中,最常用的匹配方式包括基于value属性的请求路径匹配和基于method属性的请求方法匹配。

1.基于value属性的请求路径匹配

最简单的方式就是直接指定一个路径。例如,@RequestMapping("/books")会将所有发送到/books的请求映射到控制器方法,具体示例如下。

    @RestController
    public class BookController {
        @RequestMapping("/books")
        public List<String> getAllBooks() {
            return Arrays.asList("The Great Gatsby", "Moby Dick", "War and Peace");
        }
    }

此外,@RequestMapping还支持使用通配符来进行更灵活的路径匹配。

?:匹配单个字符。例如,/boo?s可以匹配/books或/boots,但不匹配/booos。

*:匹配路径的一个部分。例如,/users/*可以匹配/users/1或/users/john,但不匹配/users或/users/1/details。

**:匹配路径的多个部分。例如,/users/**可以匹配/users/1、/users/john、/users/1/details等。

使用通配符的示例代码如下。

    @RequestMapping("/users/*")
    @RequestMapping("/users/**")

@RequestMapping既可以用于控制器类级别,也可以用于方法级别。当它被同时应用于类和方法时,类级别和方法级别的URL模式会组合在一起。例如:

    @RestController
    @RequestMapping("/api")
    public class BookController {
 
        // 将处理发送到"/api/books"的请求
        @RequestMapping("/books")
        public List<String> getAllBooks() {
            return Arrays.asList("The Great Gatsby", "Moby Dick", "War and Peace");
        }
    }

在上述代码中,所有发送到/api/books的请求都会被映射到getAllBooks()方法。当@RequestMapping应用于类级别时,它为该类中的所有方法定义了一个基础URI,可以被视为所有方法共享的“前缀”。因此,类级别的模式与方法级别的模式组合在一起,形成了最终的请求映射路径。

在控制器方法中,可以通过在路径中使用{variableName}的格式来捕获URL的一部分作为路径变量。这些变量随后可以在控制器的处理器方法中通过@PathVariable注解进行访问。例如:

    @RequestMapping("/books/{bookId}")
    public String getBook(@PathVariable String bookId) {
       // 打印传递的bookId
       System.out.println(bookId);
 
       // 假设返回与bookId相关的书籍信息
       return "The Great Gatsby";
    }
2.基于method属性的请求方法匹配

@RequestMapping注解的method属性允许我们根据HTTP请求的方法(如GET、POST、PUT、DELETE等)来进一步限定请求的匹配。这意味着可以将特定的HTTP方法映射到相应的处理器方法上。

例如,指定单个HTTP方法:

    @RequestMapping(value = "/users", method = RequestMethod.GET)

指定多个HTTP方法:

    @RequestMapping(value = "/users", method = { RequestMethod.GET,
    RequestMethod.POST })

为了简化开发和提高代码的可读性,Spring还提供了一些快捷注解,它们实际上是@RequestMapping的预设版本。

@GetMapping:对应HTTP的GET方法。

@PostMapping:对应HTTP的POST方法。

@PutMapping:对应HTTP的PUT方法。

@DeleteMapping:对应HTTP的DELETE方法。

@PatchMapping:对应HTTP的PATCH方法。

使用这些快捷注解,上述例子可以被更简洁地表示为:

    @GetMapping("/users")
    @PostMapping("/users")

通过结合基于路径和HTTP方法的匹配,@RequestMapping提供了一种灵活的方式来定义请求与处理器方法之间的映射关系。 NxyR9p09OpQB18ybehJBfv1uSP3MSUreZcX5z6A/otMLbL8FUHcFyPR4k3/W+MUK

点击中间区域
呼出菜单
上一章
目录
下一章
×