在 Spring MVC 中,一个控制器方法可以映射到多个路径,以便多个 URL 都可以访问同一个方法。你可以通过在 @RequestMapping
注解中指定多个路径来实现这一点。
以下是一个示例,展示了如何让一个控制器方法同时响应两个不同的路径:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping({"/path1", "/path2"})
public String handleRequest() {
return "This response is for both path1 and path2";
}
}
解析
@RestController
:注解表示该类是一个控制器,并且返回的每个方法的返回值都直接写入响应体中,而不是视图名称。@RequestMapping("/api")
:类级别的映射,表示该控制器的所有请求路径都将以/api
开头。@GetMapping({"/path1", "/path2"})
:方法级别的映射,表示该方法可以响应/api/path1
和/api/path2
两个路径。@GetMapping
是@RequestMapping(method = RequestMethod.GET)
的简化注解,用于处理 GET 请求。
其他 HTTP 方法
如果你需要支持其他 HTTP 方法(例如 POST、PUT 等),可以使用类似的方法,例如:
import org.springframework.web.bind.annotation.PostMapping;
@PostMapping({"/path1", "/path2"})
public String handlePostRequest() {
return "This response is for POST requests to both path1 and path2";
}
组合多个路径和方法
你也可以在一个控制器方法中组合多个路径和多种 HTTP 方法:
import org.springframework.web.bind.annotation.RequestMethod;
@RequestMapping(value = {"/path1", "/path2"}, method = {RequestMethod.GET, RequestMethod.POST})
public String handleRequest() {
return "This response is for both GET and POST requests to path1 and path2";
}
总结
通过在注解中使用数组形式的路径参数,你可以让一个控制器方法响应多个路径。这种方式非常适合处理相同逻辑但需要不同路径的请求,从而提高代码的复用性和可维护性。