以下两者之间的区别是什么?在何时使用?
@GetMapping(path = "/usr/{userId}")
public String findDBUserGetMapping(@PathVariable("userId") String userId) {
return "Test User";
}
@RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET)
public String findDBUserReqMapping(@PathVariable("userId") String userId) {
return "Test User";
}
答案 0 :(得分:7)
正如评论(和the documentation)中所述,value
是path
的别名。 Spring经常将value
元素声明为常用元素的别名。在@RequestMapping
(和@GetMapping
,...)的情况下,这是path
属性:
这是
path()
的别名。例如,@RequestMapping("/foo")
相当于@RequestMapping(path="/foo")
。
这背后的原因是value
元素是注释的默认元素,因此它允许您以更简洁的方式编写代码。
其他例子如下:
@RequestParam
(value
→name
)@PathVariable
(value
→name
)但是,别名不仅限于注释元素,因为正如您在示例中演示的那样,@GetMapping
是@RequestMapping(method = RequestMethod.GET
的别名。
只需查找references of AliasFor
in their code即可让您看到他们经常这样做。
答案 1 :(得分:4)
@GetMapping是@RequestMapping
的别名@GetMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.GET)的快捷方式。
value方法是path方法的别名。
这是path()的别名。例如,@ RequestMapping(“/ foo”)等同于@RequestMapping(path =“/ foo”)。
所以这两种方法都是相似的。
答案 2 :(得分:3)
@GetMapping
是@RequestMapping(method = RequestMethod.GET)
的缩写。
在你的情况下。
@GetMapping(path = "/usr/{userId}")
是@RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET)
的缩写。
两者都是等价的。更喜欢使用速记@GetMapping
而不是更详细的替代方案。使用@RequestMapping
@GetMapping
可以做的一件事就是提供多种请求方法。
@RequestMapping(value = "/path", method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT)
public void handleRequet() {
}
当您需要提供多个Http谓词时使用@RequestMapping
。
@RequestMapping
的另一种用法是当您需要为控制器提供顶级路径时。例如,
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping
public void createUser(Request request) {
// POST /users
// create a user
}
@GetMapping
public Users getUsers(Request request) {
// GET /users
// get users
}
@GetMapping("/{id}")
public Users getUserById(@PathVariable long id) {
// GET /users/1
// get user by id
}
}