Разница между атрибутами пути и значения в аннотации @RequestMapping

В чем разница между двумя нижеприведенными атрибутами и какой из них использовать, когда?

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

Согласно док, они одинаковы: «Это псевдоним для path (). Например, @RequestMapping (" / foo ") эквивалентен @RequestMapping (path = " / foo ")».

Guillaume Ruchot 15.05.2018 15:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
38
1
23 332
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

@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».

Guillaume Ruchot 15.05.2018 15:39

@ user7294900 Спасибо за драгоценное время

Raj 16.05.2018 07:55
Ответ принят как подходящий

Как упоминалось в комментариях (и документация), 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 (valuename)
  • @PathVariable (valuename)
  • ...

Однако псевдонимы не ограничиваются только элементами аннотации, потому что, как вы продемонстрировали в своем примере, @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
    }
}

Спасибо за драгоценное время

Raj 16.05.2018 07:55

@Juzer Ali @GetMapping(path = "/usr/{userId}"), @GetMapping(value = "/usr/{userId}") и @GetMapping("/usr/{userId}") все одинаковы?

Antony Vimal Raj 19.06.2019 08:25

Другие вопросы по теме