Разница между путем и значением в весенней загрузке - PullRequest
0 голосов
/ 15 мая 2018

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

    @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 голосов
/ 15 мая 2018

Как указано в комментариях (и в документации ), value является псевдонимом path. Spring часто объявляет элемент value как псевдоним часто используемого элемента. В случае @RequestMapping@GetMapping, ...) это свойство path:

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

Причина этого заключается в том, что элемент value является значением по умолчанию, когда речь идет о аннотациях, поэтому он позволяет писать код более лаконично.

Другие примеры этого:

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

Однако псевдонимы не ограничиваются только элементами аннотаций, потому что, как вы продемонстрировали в своем примере, @GetMapping является псевдонимом для @RequestMapping(method = RequestMethod.GET).

Просто поиск ссылок на AliasFor в их коде позволяет вам видеть, что они делают это довольно часто.

0 голосов
/ 15 мая 2018

@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
    }
}
0 голосов
/ 15 мая 2018

@ GetMapping - псевдоним для @RequestMapping

@ GetMapping - составная аннотация, которая действует как ярлык для @RequestMapping (method = RequestMethod.GET).

значение метод является псевдонимом для метода пути.

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

Так что оба метода в этом смысле похожи.

...