Spring Boot Requestmapping中路径和值之间的差异

时间:2018-05-15 13:31:53

标签: java spring rest spring-boot spring-restcontroller

以下两者之间的区别是什么?在何时使用?

    @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";
}

3 个答案:

答案 0 :(得分:7)

正如评论(和the documentation)中所述,valuepath的别名。 Spring经常将value元素声明为常用元素的别名。在@RequestMapping(和@GetMapping,...)的情况下,这是path属性:

  

这是path()的别名。例如,@RequestMapping("/foo")相当于@RequestMapping(path="/foo")

这背后的原因是value元素是注释的默认元素,因此它允许您以更简洁的方式编写代码。

其他例子如下:

  • @RequestParamvaluename
  • @PathVariablevaluename
  • ...

但是,别名不仅限于注释元素,因为正如您在示例中演示的那样,@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
    }
}