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

Raj*_*Raj 19 java rest spring 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";
}
Run Code Online (Sandbox Code Playgroud)

g00*_*00b 12

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

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

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

其他例子是:

  • @RequestParam(valuename)
  • @PathVariable(valuename)
  • ...

但是,别名不仅限于注释元素,因为正如您在示例中演示的那样,@GetMapping别名是for @RequestMapping(method = RequestMethod.GET).

只是在代码中查找引用AliasFor可以让你看到他们经常这样做.


use*_*900 6

@GetMapping是@RequestMapping 的别名

@GetMapping 是一个组合注解,作为@RequestMapping(method = RequestMethod.GET) 的快捷方式。

value方法是 path 方法的别名。

这是 path() 的别名。例如@RequestMapping("/foo") 等价于@RequestMapping(path="/foo")。

所以这两种方法在这个意义上是相似的。


Juz*_*Ali 5

@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() {

}
Run Code Online (Sandbox Code Playgroud)

使用@RequestMapping时,您需要提供多个HTTP动词。

的另一种用法@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
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的宝贵时间 (2认同)
  • @Juzer Ali `@GetMapping(path = "/usr/{userId}")`、`@GetMapping(value = "/usr/{userId}")` 和 `@GetMapping("/usr/{userId}") ` 都一样吗? (2认同)