Tavasz @ Pathvariable Annotation

1. Áttekintés

Ebben a gyors bemutatóban felfedezzük a tavaszit @PathVariable annotáció.

Egyszerűen fogalmazva, a @PathVariable annotáció használható a sablonváltozók kezelésére a kérelem URI leképezésében, és használja őket metódus paraméterekként.

Nézzük meg, hogyan kell használni @PathVariable és annak különféle tulajdonságai.

2. Egyszerű leképezés

A @PathVariable a kommentár egy olyan végpont lenne, amely egy entitást azonosít egy elsődleges kulccsal:

@GetMapping ("/ api / alkalmazottai / {id}") @ResponseBody public String getEmployeesById (@PathVariable String id) {return "ID:" + id; }

Ebben a példában azt használjuk @PathVariable annotáció az URI sablonos részének kibontásához, amelyet a változó képvisel {id}.

Egy egyszerű GET kérés nak nek / api / alkalmazottak / {id} hivatkozni fog getEmployeesById a kibontott id értékkel:

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

Most vizsgáljuk meg tovább ezt az annotációt, és nézzük meg annak attribútumait.

3. Adja meg az útváltozó nevét

Az előző példában kihagytuk a sablon útváltozó nevének meghatározását, mivel a method paraméter és az path változó neve megegyezett.

Ha azonban az útváltozó neve eltér, akkor megadhatjuk a. Argumentumában @PathVariable kommentár:

@GetMapping ("/ api / workerswithvariable / {id}") @ResponseBody public String getEmployeesByIdWithVariableName (@PathVariable ("id") String workerId) {return "ID:" + workerId; }
// localhost: 8080 / api / workerswith változó / 1 ---- ID: 1

Az útváltozó nevét is definiálhatjuk @PathVariable (érték = "id") ahelyett PathVariable („id”) az érthetőség kedvéért.

4. Több útváltozó egyetlen kérelemben

A felhasználási esettől függően egy vezérlő metódusra vonatkozó kérés URI-ben több útváltozó is szerepelhet, amelynek szintén több metódus paramétere van:

@GetMapping ("/ api / alkalmazottak / {id} / {név}") @ResponseBody nyilvános karakterlánc getEmployeesByIdAndName (@PathVariable karakterlánc azonosítója, @PathVariable karakterlánc neve) {return "ID:" + id + ", név:" + név ; }
// localhost: 8080 / api / alkalmazottak / 1 / bar ---- ID: 1, név: bar

Többet is kezelhetünk @PathVariable paraméterek egy típusú metódus paraméter használatával java.util.Térkép:

@GetMapping ("/ api / workerswithmapvariable / {id} / {name}") @ResponseBody public String getEmployeesByIdAndNameWithMapVariable (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); Karakterlánc neve = pathVarsMap.get ("név"); if (id! = null && név! = null) {return "ID:" + id + ", név:" + név; } else {return "Hiányzó paraméterek"; }}
// localhost: 8080 / api / alkalmazottak / 1 / bar ---- ID: 1, név: bar

Van azonban egy kis fogás több @ kezelése közbenPathVariable paramétereket, ha az elérési út változó karakterlánc tartalmaz egy pont (.) karaktert. Itt részletesen megvitattuk ezeket a sarokeseteket.

5. Opcionális útváltozók

Tavasszal a módszer paraméterei annotálva voltak @PathVariable alapértelmezés szerint kötelezőek:

@GetMapping (érték = {"/ api / alkalmazottakkívánatos", "/ api / alkalmazottakkívánatos / {id}"}) @ResponseBody nyilvános karakterlánc getEmployeesByIdWithRequired (@PathVariable String id) {return "ID:" + id; }

A megjelenés szerint a fenti vezérlőnek mindkettőt kezelnie kell / api / alkalmazottak szükségesek és / api / szükséges alkalmazottak / 1 kérési utak. De mivel a metódus paramétereit a @PathVariables alapértelmezés szerint kötelezőek, nem kezeli a címzettnek küldött kéréseket / api / alkalmazottak szükségesek pálya:

// localhost: 8080 / api / alkalmazottakmegkövetelt ---- {"időbélyeg": "2020-07-08T02: 20: 07.349 + 00: 00", "status": 404, "error": "Not Found", " üzenet ":" "," elérési út ":" / api / alkalmazottak szükségesek "}  // helyi gazda: 8080 / api / alkalmazottai szükségesek / 1 ---- ID: 111

Ezt kétféleképpen tudjuk kezelni.

5.1. Beállítás @PathVariable mint nem kötelező

Beállíthatjuk a kívánt tulajdona @PathVariable nak nek hamis hogy opcionális legyen. Ezért az előző példánkat módosítva most már kezelhetjük az URI verziókat a path változóval és anélkül is:

@GetMapping (érték = {"/ api / alkalmazottai megkövetelt hamis", "/ api / munkatársai megkövetelt hamis / {id}"}) @ResponseBody nyilvános karakterlánc getEmployeesByIdWithRequiredFalse (@PathVariable (kötelező = hamis) Karakterlánc azonosító) {if (id! = Null) { return "ID:" + id; } else {return "hiányzó azonosító"; }}
// localhost: 8080 / api / workerswithrequiredfalse ---- Azonosító hiányzik

5.2. Használata java.util.Opcionális

A 4.1 tavasz óta mi is használhatjuk java.util.Opcionális (Java 8+ verzióban érhető el) a nem kötelező elérési útváltozó kezeléséhez:

@GetMapping (érték = {"/ api / alkalmazottak opcionális", "/ api / alkalmazottak opcionális / {id}"}}) @ResponseBody nyilvános karakterlánc getEmployeesByIdWithOptional (@PathVariable Opcionális id) {if (id.isPresent ()) {return "ID: "+ id.get (); } else {return "hiányzó azonosító"; }}

Most, ha nem adjuk meg az elérési út változót id a kérésben megkapjuk az alapértelmezett választ:

// localhost: 8080 / api / alkalmazottai opcionálisan ---- Azonosító hiányzik 

5.3. Metódus típusú paraméter használata Térkép

Amint azt korábban bemutattuk, egyetlen típusú típusú paramétert használhatunk java.util.Térkép a kérelem URI összes útváltozójának kezeléséhez. Ezt a stratégiát használhatjuk az opcionális útváltozók esetének kezelésére is:

@GetMapping (érték = {"/ api / alkalmazottai a térképen / {id}", "/ api / alkalmazottak a térképen"}) @ResponseBody public String getEmployeesByIdWithMap (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); if (id! = null) {return "ID:" + id; } else {return "hiányzó azonosító"; }}

6. Alapértelmezett értéke @PathVariable

A dobozból kiindulva nincs olyan rendelkezés, amely meghatározná az alapértelmezett értéket a metódusokkal, amelyekhez a jegyzetet mellékelték @PathVariable. Ugyanakkor a fentiekben tárgyalt stratégiákat alkalmazhatjuk a (z) alapértelmezett értékének kielégítésére @PathVariable. Csak ellenőriznünk kell nulla az útváltozón.

Például a java.util.Opcionális, azonosíthatjuk, hogy az útváltozó-e nulla vagy nem. Ha az nulla akkor csak alapértelmezett értékkel válaszolhatunk a kérésre:

@GetMapping (value = {"/ api / defaultemployeeswithoptional", "/ api / defaultemployeeswithoptional / {id}"}) @ResponseBody public String getDefaultEmployeesByIdWithOptional (@PathVariable Optional id) {if (id.isPresent ()) {return "ID "+ id.get (); } else {return "ID: Alapértelmezett alkalmazott"; }}

7. Következtetés

Ebben a cikkben megvitattuk a Spring's használatát @PathVariable annotáció. Meghatároztuk a @PathVariable annotáció, hogy megfeleljen a különféle felhasználási eseteknek, például opcionális paramétereknek és az alapértelmezett értékeknek

Az ebben a cikkben bemutatott kódpélda a Githubon is elérhető.