[Spring Tip] Differenza tra @RequestParam e @PathVariable
Dubbio piuttosto comune quando si comincia a lavorare con Spring MVC…
Che differenza c’è tra le annotazioni
@RequestParam
e@PathVariable
?
Ve lo spiego subito! :-)
Parametri della richiesta
L’annotazione @RequestParam
permette di sfruttare il data binding di Spring MVC per associare un parametro della richiesta HTTP ad un corrispondente parametro dell’handler method.
Supponiamo di aver dichiarato nel nostro Controller un metodo di questo tipo:
@PostMapping("/users")
public String newUser(@RequestParam("name") String userName){
// ...
}
In questo esempio abbiamo associato il parametro userName
del metodo al parametro name
inviato nel payload della POST
. Questa associazione fa sì che la variabile userName
riceva come argomento il valore del corrispondente parametro della richiesta HTTP.
[Leggi anche: Utilizzare le annotazioni @RequestParam e @RequestHeader di Spring MVC]
URI template e placeholder
Il mapping delle richieste HTTP, in Spring MVC, avviene utilizzando l’annotazione @RequestMapping
(o una delle sue specializzazioni: @GetMapping
, @PostMapping
, ecc.), che consente di specificare un URI template. L’URI template rappresenta il formato dei path che saranno gestiti dal metodo annotato.
Il template può contenere dei placeholder che, all’occorrenza, possono essere associati ai parametri dell’handler method, proprio attraverso l’annotazione @PathVariable
.
@GetMapping("/users/{userId}")
public String getUser(@PathVariable("userId") String id){
// ...
}
Il metodo riportato nell’esempio gestirà le richieste di tipo GET dirette a path con formato /users/{userId}
. Il placeholder {userId}
, consente di recuperare il valore presente nell’URL e di assegnarlo) al parametro stringa id
.
[Leggi anche: Mapping delle richieste HTTP in Spring MVC]
In conclusione
Tutto chiaro?
Come avete visto, entrambe le annotazioni ci permettono, in un certo senso, di recuperare informazioni dalla richiesta HTTP.
Sintetizzando ulteriormente:
-
@PathVariable
ci permette di recuperare valori inclusi nell’URI associato alla richiesta; -
@RequestParam
ci è utile per accedere ai parametri presenti nel corpo della richiesta (o nella query string, nel caso di richieste di tipoGET
).
Alla prossima,
David