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.