Lente @RequestParam vs @PathVariable annotaties
1. Overzicht
In deze korte tutorial onderzoeken we de verschillen tussen Spring's @RequestParam en @PathVariable annotaties.
@RequestParam en @PathVariable kunnen beide worden gebruikt om waarden uit de verzoek-URI te extraheren, maar ze zijn een beetje anders.
2. Queryparameter versus URI-pad
Terwijl @RequestParams waarden extraheren uit de queryreeks, @PathVariables waarden extraheren uit het URI-pad:
@GetMapping ("/ foos / {id}") @ResponseBody openbare String getFooById (@PathVariable String-id) {return "ID:" + id; }
Vervolgens kunnen we kaarten maken op basis van het pad:
// localhost: 8080 / foos / abc ---- ID: abc
En voor @RequestParam, het zal zijn:
@GetMapping ("/ foos") @ResponseBody openbare String getFooByIdUsingQueryParam (@RequestParam String-id) {return "ID:" + id; }
Wat ons hetzelfde antwoord zou geven, alleen een andere URI:
// localhost: 8080 / foos? id = abc ---- ID: abc
3. Gecodeerd versus exacte waarde
Omdat @PathVariable haalt waarden uit het URI-pad, het is niet gecodeerd. Aan de andere kant, @RequestParam is.
Gebruikmakend van het vorige voorbeeld, ab + c zal terugkeren zoals het is:
// localhost: 8080 / foos / ab + c ---- ID: ab + c
Maar voor een @RequestParam verzoek, is de parameter URL gedecodeerd:
// localhost: 8080 / foos? id = ab + c ---- ID: ab c
4. Optionele waarden
Beide @RequestParam en @PathVariable kan optioneel zijn.
We kunnen maken @PathVariable optioneel met behulp van de verplicht attribuut beginnend met Spring 4.3.3:
@GetMapping ({"/ myfoos / optional", "/ myfoos / optional / {id}"}) @ResponseBody public String getFooByOptionalId (@PathVariable (verplicht = false) String id) {return "ID:" + id; }
Wat we dan kunnen doen:
// localhost: 8080 / myfoos / optioneel / abc ---- ID: abc
of:
// localhost: 8080 / myfoos / optioneel ---- ID: null
Voor @RequestParam, kunnen we ook de verplicht attribuut.
Let daar op we moeten voorzichtig zijn bij het maken @PathVariable optioneel, om conflicten in paden te vermijden.
5. Conclusie
In dit artikel hebben we de verschillen tussen @RequestParam en @PathVariable.
De volledige broncode voor de voorbeelden is te vinden op GitHub.