Proljeće @ Pathvariable Annotation

1. Pregled

U ovom ćemo brzom vodiču istražiti proljeće @PathVariable bilješka.

Jednostavno rečeno, the @PathVariable napomena se može koristiti za obradu varijabli predloška u mapiranju URI zahtjeva, i koristiti ih kao parametre metode.

Pogledajmo kako koristiti @PathVariable i njeni razni atributi.

2. Jednostavno mapiranje

Jednostavan slučaj upotrebe @PathVariable napomena bi bila krajnja točka koja identificira entitet s primarnim ključem:

@GetMapping ("/ api / zaposlenici / {id}") @ResponseBody javni niz getEfficieesById (@PathVariable String id) {return "ID:" + id; }

U ovom primjeru koristimo @PathVariable napomena za izdvajanje predloška dijela URI-a predstavljenog varijablom {iskaznica}.

Jednostavan GET zahtjev do / api / zaposlenici / {id} prizivat će getEfficieesById s izdvojenom vrijednošću id:

// localhost: 8080 / api / zaposlenici / 111 ---- ID: 111

Ajmo sada dalje istraživati ​​ovu napomenu i pogledati njene atribute.

3. Određivanje naziva varijable puta

U prethodnom smo primjeru preskočili definiranje imena varijable puta predloška jer su nazivi parametra metode i varijable puta bili jednaki.

Međutim, ako je ime varijable puta različito, možemo ga specificirati u argumentu @PathVariable napomena:

@GetMapping ("/ api / zaposlenihwithvariable / {id}") @ResponseBody javni niz getEfficieesByIdWithVariableName (@PathVariable ("id") String workerId) {return "ID:" + workerId; }
// localhost: 8080 / api / zaposlenihwithvariable / 1 ---- ID: 1

Naziv varijable puta također možemo definirati kao @PathVariable (vrijednost = ”id”) umjesto PathVariable ("id") radi jasnoće.

4. Višestruke varijable puta u jednom zahtjevu

Ovisno o slučaju upotrebe, možemo imati više varijabli puta u našem URI-ju zahtjeva za metodu kontrolera, koja također ima više parametara metode:

@GetMapping ("/ api / zaposlenici / {id} / {ime}") @ResponseBody javni niz getEfficieesByIdAndName (@PathVariable String id, @PathVariable String name) {return "ID:" + id + ", name:" + name ; }
// localhost: 8080 / api / zaposlenici / 1 / bar ---- ID: 1, naziv: bar

Možemo se nositi i s više njih @PathVariable parametara pomoću parametra metode tipa java.util.Map:

@GetMapping ("/ api / staffwithmapvariable / {id} / {name}") @ResponseBody javni niz getEfficieesByIdAndNameWithMapVariable (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); Ime niza = pathVarsMap.get ("ime"); if (id! = null && name! = null) {return "ID:" + id + ", name:" + ime; } else {return "Nedostaju parametri"; }}
// localhost: 8080 / api / zaposlenici / 1 / bar ---- ID: 1, naziv: bar

Međutim, postoji mali ulov prilikom rukovanja s višestrukim @Promjenjiva putanja parametri kada niz varijable puta sadrži znak točkice (.). Ovdje smo detaljno razgovarali o tim kutnim slučajevima.

5. Izborne varijable puta

U proljeće su parametri metode označeni s @PathVariable su zadani:

@GetMapping (value = {"/ api / zaposlenihwithrequired", "/ api / zaposleniciwithrequired / {id}"}) @ResponseBody javni niz getEfficieesByIdWithRequired (@PathVariable String id) {return "ID:" + id; }

Prema svom izgledu, gornji kontroler trebao bi obraditi oboje / api / zaposlenici potrebni i / api / zaposlenici s potrebnim / 1 putanje zahtjeva. Ali, budući da su parametri metode označeni s @PathVariables su prema zadanim postavkama obvezni, ne obrađuje zahtjeve poslane na / api / zaposlenici potrebni staza:

// localhost: 8080 / api / staffwithrequired ---- {"timestamp": "2020-07-08T02: 20: 07.349 + 00: 00", "status": 404, "error": "Not Found", " poruka ":" "," put ":" / api / zaposlenici s potrebnim "}  // localhost: 8080 / api / staffwithrequired / 1 ---- ID: 111

To možemo riješiti na dva načina.

5.1. Postavljanje @PathVariable kao što nije potrebno

Možemo postaviti potreban vlasništvo @PathVariable do lažno da bude neobavezna. Stoga, modificirajući naš prethodni primjer, sada možemo obrađivati ​​URI verzije sa i bez varijable puta:

@GetMapping (value = {"/ api / staffwithrequiredfalse", "/ api / staffwithrequiredfalse / {id}"}) @ResponseBody public String getEfficieesByIdWithRequiredFalse (@PathVariable (required = false) String id) {if {id! = Null povratak "ID:" + id; } else {povratak "ID nedostaje"; }}
// localhost: 8080 / api / staffwithrequiredfalse ---- nedostaje ID

5.2. Koristeći java.util.Izborno

Od proljeća 4.1., Također možemo koristiti java.util.Izborno (dostupno u Javi 8+) za obradu neobavezne varijable puta:

@GetMapping (value = {"/ api / zaposleniciwithoptional", "/ api / zaposleniciwithoptional / {id}"}) @ResponseBody javni niz getEfficieesByIdWithOptional (@PathVariable Neobvezujući id) {if (id.isPresent ()) {return "ID: "+ id.get (); } else {povratak "ID nedostaje"; }}

Sada, ako ne odredimo varijablu puta iskaznica u zahtjevu dobivamo zadani odgovor:

// localhost: 8080 / api / staffwithoptional ---- nedostaje ID 

5.3. Korištenje parametra metode tipa Karta

Kao što je ranije prikazano, možemo koristiti jedan parametar metode tipa java.util.Map za obradu svih varijabli puta u URI-ju zahtjeva. Ovu strategiju također možemo koristiti za rukovanje neobaveznim slučajem varijabli puta:

@GetMapping (value = {"/ api / zaposlenihwithmap / {id}", "/ api / zaposleniciwithmap"}) @ResponseBody javni niz getEfficieesByIdWithMap (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); if (id! = null) {return "ID:" + id; } else {povratak "ID nedostaje"; }}

6. Zadana vrijednost za @PathVariable

Iz okvira ne postoji odredba koja definira zadanu vrijednost za parametre metode označene s @PathVariable. Međutim, možemo koristiti iste strategije o kojima smo gore raspravljali da bismo zadovoljili slučaj zadane vrijednosti za @PathVariable. Samo trebamo provjeriti null na varijabli puta.

Na primjer, pomoću java.util.Izborno, možemo prepoznati je li varijabla puta null ili ne. Ako je null tada možemo samo odgovoriti na zahtjev sa zadanom vrijednošću:

@GetMapping (value = {"/ api / defaultemployeeswithoptional", "/ api / defaultemployeeswithoptional / {id}"}) @ResponseBody public String getDefaultEfficieesByIdWithOptions (@PathVariable Optional id) {if (id.is) {0 (ID.is) { "+ id.get (); } else {return "ID: Zadani zaposlenik"; }}

7. Zaključak

U ovom smo članku razgovarali o tome kako koristiti Spring's @PathVariable bilješka. Također smo identificirali različite načine za učinkovitu upotrebu @PathVariable napomena koja odgovara različitim slučajevima korištenja, poput neobaveznih parametara i postupanja sa zadanim vrijednostima.

Primjer koda prikazan u ovom članku dostupan je i na Githubu.