web-dev-qa-db-fra.com

Différence entre le chemin et la valeur dans Spring Boot Requestmapping

Quelle est la différence entre moins de deux et lequel utiliser quand?

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

Comme mentionné dans les commentaires (et la documentation ), value est un alias de path. Spring déclare souvent l'élément value comme un alias à un élément couramment utilisé. Dans le cas de @RequestMapping (Et @GetMapping, ...) c'est la propriété path:

Il s'agit d'un alias pour path() . Par exemple, @RequestMapping("/foo") est équivalent à @RequestMapping(path="/foo").

Le raisonnement derrière cela est que l'élément value est la valeur par défaut quand il s'agit d'annotations, donc il vous permet d'écrire du code de manière plus concise.

Voici d'autres exemples:

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

Cependant, les alias ne sont pas limités aux éléments d'annotation uniquement, car comme vous l'avez démontré dans votre exemple, @GetMapping Est un alias pour @RequestMapping(method = RequestMethod.GET).

La simple recherche de références de AliasFor dans leur code vous permet de voir qu'ils le font assez souvent.

11
g00glen00b

@GetMapping Est un raccourci pour @RequestMapping(method = RequestMethod.GET).

Dans ton cas. @GetMapping(path = "/usr/{userId}") est un raccourci pour @RequestMapping(value = "/usr/{userId}", method = RequestMethod.GET).

Les deux sont équivalents. Préférez utiliser le raccourci @GetMapping Plutôt que l'alternative la plus verbeuse. Une chose que vous pouvez faire avec @RequestMapping Que vous ne pouvez pas avec @GetMapping Est de fournir plusieurs méthodes de demande.

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

}

Utilisez @RequestMapping Lorsque vous devez fournir plusieurs verbes Http.

Une autre utilisation de @RequestMapping Est lorsque vous devez fournir un chemin de niveau supérieur pour un contrôleur. Par exemple.

@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
    }
}
5
Juzer Ali

@ GetMapping est un alias pour @RequestMapping

@GetMapping est une annotation composée qui agit comme un raccourci pour @RequestMapping (méthode = RequestMethod.GET).

value method est un alias pour la méthode path.

Il s'agit d'un alias pour path (). Par exemple, @RequestMapping ("/ foo") est équivalent à @RequestMapping (path = "/ foo").

Les deux méthodes sont donc similaires en ce sens.

4
user7294900