В чем разница между двумя нижеприведенными атрибутами и какой из них использовать, когда?
@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";
}




@GetMapping - это псевдоним для @RequestMapping
@GetMapping is a composed annotation that acts as a shortcut for @RequestMapping(method = RequestMethod.GET).
Метод значение - это псевдоним метода пути.
This is an alias for path(). For example @RequestMapping("/foo") is equivalent to @RequestMapping(path = "/foo").
Таким образом, оба метода похожи в этом смысле.
Первый - «@GetMapping», а не «@RequestMapping».
@ user7294900 Спасибо за драгоценное время
Как упоминалось в комментариях (и документация), value - это псевдоним path. Spring часто объявляет элемент value как псевдоним для обычно используемого элемента. В случае @RequestMapping (и @GetMapping, ...) это свойство path:
This is an alias for
path(). For example@RequestMapping("/foo")is equivalent to@RequestMapping(path = "/foo").
Причина в том, что элемент value используется по умолчанию, когда дело доходит до аннотаций, поэтому он позволяет писать код более кратким образом.
Другие примеры этого:
@RequestParam (value → name)@PathVariable (value → name)Однако псевдонимы не ограничиваются только элементами аннотации, потому что, как вы продемонстрировали в своем примере, @GetMapping является псевдонимом для @RequestMapping(method = RequestMethod.GET).
Просто поиск ссылки AliasFor в их коде позволяет увидеть, что они делают это довольно часто.
@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() {
}
Используйте @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
}
}
Спасибо за драгоценное время
@Juzer Ali @GetMapping(path = "/usr/{userId}"), @GetMapping(value = "/usr/{userId}") и @GetMapping("/usr/{userId}") все одинаковы?
Согласно док, они одинаковы: «Это псевдоним для path (). Например, @RequestMapping (" / foo ") эквивалентен @RequestMapping (path = " / foo ")».