Anotácia Spring @Pathvariable

1. Prehľad

V tomto rýchlom výučbe preskúmame jar @PathVariable anotácia.

Jednoducho povedané, the @PathVariable anotáciu je možné použiť na spracovanie premenných šablón v mapovaní URI požiadavkya použiť ich ako parametre metódy.

Pozrime sa, ako sa používa @PathVariable a jeho rôzne atribúty.

2. Jednoduché mapovanie

Jednoduchý prípad použitia @PathVariable anotácia by bola koncovým bodom, ktorý identifikuje entitu s primárnym kľúčom:

@GetMapping ("/ api / zamestnanci / {id}") @ResponseBody verejný reťazec getEmployeesById (@PathVariable reťazec id) {návrat "ID:" + id; }

V tomto príklade používame @PathVariable anotácia na extrahovanie templátovanej časti URI predstavovanej premennou {id}.

Jednoduchý ZÍSKAJTE žiadosť do / api / zamestnanci / {id} vyvolá getEmployeesById s extrahovanou hodnotou id:

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

Teraz poďme ďalej preskúmať túto anotáciu a pozrime sa na jej atribúty.

3. Zadanie názvu premennej cesty

V predchádzajúcom príklade sme preskočili definovanie názvu premennej cesty šablóny, pretože názvy parametra metódy a premennej cesty boli rovnaké.

Ak je však názov premennej cesty iný, môžeme ho určiť v argumente parametra @PathVariable anotácia:

@GetMapping ("/ api / employeewithvariable / {id}") @ResponseBody public String getEmployeesByIdWithVariableName (@PathVariable ("id") String employeeId) {return "ID:" + employeeId; }
// localhost: 8080 / api / Zamestnanci s premennou / 1 ---- ID: 1

Môžeme tiež definovať názov premennej cesty ako @PathVariable (hodnota = „id“) namiesto PathVariable („id“) kvôli prehľadnosti.

4. Viaceré premenné cesty v jednej požiadavke

V závislosti od prípadu použitia v našom URI požiadavky pre metódu kontrolóra môžeme mať viac ako jednu premennú cesty, ktorá má tiež viac parametrov metódy:

@GetMapping ("/ api / zamestnanci / {id} / {name}") @ResponseBody verejný reťazec getEmployeesByIdAndName (@PathVariable ID reťazca, @PathVariable názov reťazca) {návrat "ID:" + id + ", meno:" + meno ; }
// localhost: 8080 / api / zamestnanci / 1 / bar ---- ID: 1, názov: bar

Zvládneme aj viac ako jednu @PathVariable parametre pomocou parametra metódy typu java.util.Map:

@GetMapping ("/ api / employeewithmapvariable / {id} / {name}") @ResponseBody public String getEmployeesByIdAndNameWithMapVariable (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); Názov reťazca = pathVarsMap.get ("názov"); if (id! = null && name! = null) {návrat "ID:" + id + ", meno:" + meno; } else {návrat "Chýbajúce parametre"; }}
// localhost: 8080 / api / zamestnanci / 1 / bar ---- ID: 1, názov: bar

Pri spracovávaní viacerých znakov @ je však malý úlovokPathVariable parametre, keď reťazec premennej cesty obsahuje bodkový (.) znak. Tieto rohové prípady sme tu podrobne rozobrali.

5. Voliteľné premenné cesty

Na jar boli parametre metódy anotované pomocou @PathVariable sú predvolene povinné:

@GetMapping (value = {"/ api / employeewithrequired", "/ api / zaměstnanciwithrequired / {id}"}) @ResponseBody public String getEmployeesByIdWithRequired (@PathVariable String id) {return "ID:" + id; }

Ako to vyzerá, vyššie uvedený radič by mal zvládnuť oboje / api / zamestnanci a / api / požadovaní zamestnanci / 1 cesty požiadaviek. Ale, pretože parametre metódy anotované @PathVariables sú predvolene povinné, nespracováva požiadavky odoslané na adresu / api / zamestnanci cesta:

// localhost: 8080 / api / zamestnancivyžadovaní ---- {"timestamp": "2020-07-08T02: 20: 07,349 + 00: 00", "status": 404, "chyba": "Nenašiel sa", " správa ":" "," cesta ":" / api / zamestnancipožadované "}  // localhost: 8080 / api / zamestnancivyžadovaní / 1 ---- ID: 111

Môžeme to vyriešiť dvoma spôsobmi.

5.1. Nastavenie @PathVariable ako sa nevyžaduje

Môžeme nastaviť požadovaný majetok @PathVariable do nepravdivé aby to bolo voliteľné. Preto, keď upravíme náš predchádzajúci príklad, môžeme teraz spracovávať verzie URI s premennou cesty a bez nej:

@GetMapping (value = {"/ api / zaměstnanciwithrequiredfalse", "/ api / zaměstnanciwithrequiredfalse / {id}"}) @ResponseBody verejný reťazec getEmployeesByIdWithRequiredFalse (@PathVariable (povinné = nepravdivé) reťazec) {if (id! = Null) návrat "ID:" + id; } else {návrat "chýba ID"; }}
// localhost: 8080 / api / zamestnanci s požadovanou chybou ---- chýba ID

5.2. Použitím java.util.Voliteľné

Od jari 4.1 môžeme tiež používať java.util.Voliteľné (k dispozícii v prostredí Java 8+) na spracovanie nepovinnej premennej cesty:

@GetMapping (value = {"/ api / employeewithoptional", "/ api / zaměstnanciwithoptional / {id}"}) @ResponseBody verejný reťazec getEmployeesByIdWithOptional (@PathVariable nepovinné ID) {if (id.isPresent ()) {návrat "ID: "+ id.get (); } else {návrat "chýba ID"; }}

Teraz, ak neurčíme premennú cesty id v žiadosti dostaneme predvolenú odpoveď:

// localhost: 8080 / api / zamestnanci bez možnosti výberu ---- ID chýba 

5.3. Použitie parametra metódy typu Mapa

Ako už bolo uvedené skôr, môžeme použiť jeden parameter metódy typu java.util.Map na spracovanie všetkých premenných cesty v URI požiadavky. Túto stratégiu môžeme použiť aj na riešenie prípadu voliteľných premenných cesty:

@GetMapping (value = {"/ api / employeewithmap / {id}", "/ api / Zaměstnanciwithmap"}) @ResponseBody public String getEmployeesByIdWithMap (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); if (id! = null) {return "ID:" + id; } else {návrat "chýba ID"; }}

6. Predvolená hodnota pre @PathVariable

Po vybalení z krabice neexistuje ustanovenie na definovanie predvolenej hodnoty pre parametre metódy anotované @PathVariable. Na uspokojenie prípadu predvolenej hodnoty pre @PathVariable. Musíme to skontrolovať nulový na premennej cesta.

Napríklad pomocou java.util.Voliteľné, môžeme zistiť, či je premenná cesty nulový alebo nie. Keď to je nulový potom môžeme na žiadosť odpovedať predvolenou hodnotou:

@GetMapping (value = {"/ api / defaultemployeeswithoptional", "/ api / defaultemployeeswithoptional / {id}"}) @ResponseBody verejný reťazec getDefaultEmployeesByIdWithOptional (@PathVariable nepovinné ID) {if (id.isPresent () {) "+ id.get (); } else {návrat "ID: Predvolený zamestnanec"; }}

7. Záver

V tomto článku sme diskutovali o tom, ako používať Spring @PathVariable anotácia. Identifikovali sme tiež rôzne spôsoby, ako efektívne využívať @PathVariable anotácia tak, aby vyhovovala rôznym prípadom použitia, ako sú voliteľné parametre a riešenie predvolených hodnôt.

Príklad kódu zobrazený v tomto článku je k dispozícii aj na serveri Github.


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