Proljeće @RequestParam vs @PathVariable Annotations

1. Pregled

U ovom brzom vodiču istražit ćemo razlike između proljeća @RequestParam i @PathVariable bilješke.

@RequestParam i @PathVariable obje se mogu koristiti za izdvajanje vrijednosti iz URI-ja zahtjeva, ali su malo različite.

2. Parametar upita u odnosu na URI put

Dok @RequestParams izdvajanje vrijednosti iz niza upita, @PathVariables izdvajanje vrijednosti iz URI puta:

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

Zatim možemo mapirati na temelju puta:

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

I za @RequestParam, biti će:

@GetMapping ("/ foos") @ResponseBody javni niz GetFooByIdUsingQueryParam (@RequestParam String id) {return "ID:" + id; }

Što bi nam dalo isti odgovor, samo drugačiji URI:

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

3. Kodirano u odnosu na točnu vrijednost

Jer @PathVariable izvlači vrijednosti iz URI puta, nije kodirano. S druge strane, @RequestParam je.

Koristeći prethodni primjer, ab + c vratit će se kakav jest:

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

Ali za a @RequestParam zahtjev, parametar je dekodiran URL-om:

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

4. Izborne vrijednosti

Oba @RequestParam i @PathVariable može biti neobavezna.

Možemo napraviti @PathVariable neobavezno pomoću potreban atribut koji počinje s Spring 4.3.3:

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

Što onda možemo učiniti bilo što:

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

ili:

// localhost: 8080 / myfoos / po izboru ---- ID: null

Za @RequestParam, također možemo koristiti potreban atribut.

Imajte na umu da trebali bismo biti oprezni pri izradi @PathVariable nije obavezno, kako bi se izbjegli sukobi na putovima.

5. Zaključak

U ovom smo članku naučili razlike između @RequestParam i @PathVariable.

Cjeloviti izvorni kod za primjere možete pronaći na GitHubu.