Spring @RequestParam vs @PathVariable Annotations
1. Oversikt
I denne raske opplæringen vil vi utforske forskjellene mellom vårens @RequestParam og @PathVariable kommentarer.
@RequestParam og @PathVariable kan begge brukes til å trekke ut verdier fra forespørsels-URI, men de er litt forskjellige.
2. Spørringsparameter vs URI-bane
Samtidig som @RequestParams trekke ut verdier fra spørringsstrengen, @PathVariables trekke ut verdier fra URI-banen:
@GetMapping ("/ foos / {id}") @ResponseBody offentlig streng getFooById (@PathVariable streng-id) {return "ID:" + id; }
Deretter kan vi kartlegge basert på banen:
// localhost: 8080 / foos / abc ---- ID: abc
Og for @RequestParam, det blir:
@GetMapping ("/ foos") @ResponseBody offentlig streng getFooByIdUsingQueryParam (@RequestParam streng-id) {return "ID:" + id; }
Som vil gi oss den samme responsen, bare en annen URI:
// localhost: 8080 / foos? id = abc ---- ID: abc
3. Kodet mot nøyaktig verdi
Fordi @PathVariable trekker ut verdier fra URI-banen, er den ikke kodet. På den andre siden, @RequestParam er.
Ved hjelp av forrige eksempel, ab + c kommer tilbake som den er:
// localhost: 8080 / foos / ab + c ---- ID: ab + c
Men for en @RequestParam forespørsel, er parameteren URL-dekodet:
// localhost: 8080 / foos? id = ab + c ---- ID: ab c
4. Valgfrie verdier
Både @RequestParam og @PathVariable kan være valgfritt.
Vi kan lage @PathVariable valgfritt ved å bruke kreves attributt som begynner med våren 4.3.3:
@GetMapping ({"/ myfoos / optional", "/ myfoos / optional / {id}"}) @ResponseBody public String getFooByOptionalId (@PathVariable (required = false) Streng-id) {return "ID:" + id; }
Som vi da kan gjøre enten:
// localhost: 8080 / myfoos / valgfritt / abc ---- ID: abc
eller:
// localhost: 8080 / myfoos / valgfritt ---- ID: null
Til @RequestParam, kan vi også bruke kreves Egenskap.
Noter det vi bør være forsiktige når vi lager @PathVariable valgfritt, for å unngå konflikter i stier.
5. Konklusjon
I denne artikkelen lærte vi forskjellene mellom @RequestParam og @PathVariable.
Den fullstendige kildekoden for eksemplene finner du på GitHub.