Jarné poznámky @RequestParam vs @PathVariable

1. Prehľad

V tomto rýchlom výučbe preskúmame rozdiely medzi jarnými @RequestParam a @PathVariable anotácie.

@RequestParam a @PathVariable obidve možno použiť na extrahovanie hodnôt z identifikátora URI požiadavky, sú však trochu odlišné.

2. Cesta parametra dopytu vs cesta URI

Zatiaľ čo @RequestParams extrahovať hodnoty z reťazca dotazu, @PathVariables extrahujte hodnoty z cesty URI:

@GetMapping ("/ foos / {id}") @ResponseBody public String getFooById (@PathVariable String id) {return "ID:" + id; }

Potom môžeme mapovať na základe cesty:

// localhost: 8080 / foos / abc ---- ID: abc

A pre @RequestParam, bude to:

@GetMapping ("/ foos") @ResponseBody public String getFooByIdUsingQueryParam (@RequestParam String id) {return "ID:" + id; }

Čo by nám dalo rovnakú odpoveď, len iný URI:

// localhost: 8080 / foos? id = abc ---- ID: abc

3. Kódovaná vs presná hodnota

Pretože @PathVariable extrahuje hodnoty z cesty URI, nie je kódovaná. Na druhej strane, @RequestParam je.

Pomocou predchádzajúceho príkladu ab + c vráti sa také, aké je:

// localhost: 8080 / foos / ab + c ---- ID: ab + c

Ale pre a @RequestParam požiadavka, parameter je dekódovaný URL:

// localhost: 8080 / foos? id = ab + c ---- ID: ab c

4. Nepovinné hodnoty

Oboje @RequestParam a @PathVariable môže byť voliteľné.

Môžeme vyrobiť @PathVariable voliteľné pomocou požadovaný atribút začínajúci na jar 4.3.3:

@GetMapping ({"/ myfoos / optional", "/ myfoos / optional / {id}"}) @ResponseBody public String getFooByOptionalId (@PathVariable (required = false) String id) {return "ID:" + id; }

Čo potom môžeme urobiť buď:

// localhost: 8080 / myfoos / optional / abc ---- ID: abc 

alebo:

// localhost: 8080 / myfoos / voliteľné ---- ID: null

Pre @RequestParam, môžeme tiež použiť požadovaný atribút.

Poznač si to pri výrobe by sme mali byť opatrní @PathVariable voliteľné, aby sa zabránilo konfliktom v cestách.

5. Záver

V tomto článku sme sa dozvedeli rozdiely medzi @RequestParam a @PathVariable.

Celý zdrojový kód príkladov nájdete na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found