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.