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";
}
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
(value
→ name
)@PathVariable
(value
→ name
)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.
@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
}
}
@ 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.