Difference between path and value attributes in @RequestMapping annotation Difference between path and value attributes in @RequestMapping annotation spring spring

Difference between path and value attributes in @RequestMapping annotation


As mentioned in the comments (and the documentation), value is an alias to path. Spring often declares the value element as an alias to a commonly used element. In the case of @RequestMapping (and @GetMapping, ...) this is the path property:

This is an alias for path(). For example @RequestMapping("/foo") is equivalent to @RequestMapping(path="/foo").

The reasoning behind this is that the value element is the default when it comes to annotations, so it allows you to write code in a more concise way.

Other examples of this are:

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

However, aliases aren't limited to annotation elements only, because as you demonstrated in your example, @GetMapping is an alias for @RequestMapping(method = RequestMethod.GET).

Just looking for references of AliasFor in their code allows you to see that they do this quite often.


@GetMapping is a shorthand for @RequestMapping(method = RequestMethod.GET).

In your case.@GetMapping(path = "/usr/{userId}") is a shorthand for @RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET).

Both are equivalent. Prefer using shorthand @GetMapping over the more verbose alternative. One thing that you can do with @RequestMapping which you can't with @GetMapping is to provide multiple request methods.

@RequestMapping(value = "/path", method = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT)public void handleRequet() {}

Use @RequestMapping when you need to provide multiple Http verbs.

Another usage of @RequestMapping is when you need to provide a top level path for a controller. For e.g.

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


@GetMapping is an alias for @RequestMapping

@GetMapping is a composed annotation that acts as a shortcut for @RequestMapping(method = RequestMethod.GET).

value method is an alias for path method.

This is an alias for path(). For example @RequestMapping("/foo") is equivalent to @RequestMapping(path="/foo").

So both methods are similar in that sense.