Rövid útmutató a tavaszi MVC mátrixváltozókhoz

1. Áttekintés

Az RFC 3986 URI specifikáció az URI elérési útjának paramétereit név-érték párokként határozta meg. A mátrixváltozók egy Spring által megfogalmazott kifejezés és alternatív megvalósítás az URI útvonal paramétereinek átadására és elemzésére.

A mátrix változók támogatása a Spring MVC 3.2-ben vált elérhetővé, és ennek célja egyszerűsítse a kéréseket nagy számú paraméterrel.

Ebben a cikkben megmutatjuk, hogyan egyszerűsíthetjük azokat a komplex GET kéréseket, amelyek változó vagy opcionális útvonal-paramétereket használnak az URI különböző elérési útvonalain belül.

2. Konfiguráció

A Spring MVC Matrix Variables engedélyezéséhez kezdjük a konfigurációval:

@Configuration public class A WebConfig végrehajtja a WebMvcConfigurer {@Orride public void configurePathMatch (PathMatchConfigurer configurer) {UrlPathHelper urlPathHelper = new UrlPathHelper (); urlPathHelper.setRemoveSemicolonContent (hamis); configurer.setUrlPathHelper (urlPathHelper); }}

Ellenkező esetben alapértelmezés szerint le vannak tiltva.

3. A mátrixváltozók használata

Ezek a változók az útvonal bármely részén megjelenhetnek, és az egyenlő karaktert (“=”) az értékek megadására, a pontosvesszőt (‘;’) pedig az egyes mátrixváltozók elhatárolására használják. Ugyanazon az úton megismételhetjük ugyanazt a változó nevét, vagy különálló értékeket különíthetünk el a vessző (‘,’) segítségével.

Példánkban van egy vezérlő, amely információkat nyújt az alkalmazottakról. Minden alkalmazottnak van egy munkaterülete, és mi az adott tulajdonság alapján kereshetünk. A következő kérés használható keresésre:

// localhost: 8080 / spring-mvc-java-2 / workerArea / workingArea = rh, informatics, admin

vagy így:

// localhost: 8080 / spring-mvc-java-2 / workerArea / workingArea = rh; workingArea = informatika; workingArea = admin

Amikor ezekre a változókra szeretnénk hivatkozni a Spring MVC-ben, akkor használnunk kell az annotációt @MatrixVariable.

Példáinkban a Munkavállaló osztály:

public class Alkalmazott {private long id; privát karakterlánc neve; privát karakterlánc contactNumber; // szabványos beállítók és szerelők}

És a Vállalat osztály:

nyilvános osztály Társaság {private long id; privát karakterlánc neve; // szabványos beállítók és szerelők}

Ez a két osztály megköti a kérés paramétereit.

4. A mátrix változó tulajdonságainak meghatározása

Megadhatjuk a változó kötelező vagy alapértelmezett tulajdonságait. A következő példában a elérhetőség szükséges, tehát be kell vonni az utunkba, valami ilyesmi:

// localhost: 8080 / spring-mvc-java-2 / alkalmazottakContacts / contactNumber = 223334411

A kérelmet a következő módszerrel kezeljük:

@RequestMapping (value = "/ alkalmazottakKapcsolatok / {contactNumber}", metódus = RequestMethod.GET) @ResponseBody nyilvános ResponseEntity getEmployeeBycontactNumber (@MatrixVariable (kötelező = igaz) String contactNumber) {Lista alkalmazottak listája = új ArrayList (); ... adja vissza az új ResponseEntity-t(alkalmazottak listája, HttpStatus.OK); }

Ennek eredményeként megkapjuk az összes alkalmazottat, akik rendelkeznek a kapcsolattartási számmal 223334411.

5. Kiegészítő paraméter

A mátrixváltozók kiegészíthetik az útváltozókat.

Például egy alkalmazott után kutatjuk a nevét, de felvehetjük kapcsolattartójának kezdő számát is.

A keresésnek a következőnek kell lennie:

// localhost: 8080 / spring-mvc-java-2 / alkalmazottak / John; beginContactNumber = 22001

A kérelmet a következő módszerrel kezeljük:

@RequestMapping (érték = "/ alkalmazottak / {név}", módszer = RequestMethod.GET) @ResponseBody nyilvános ResponseEntity getEmployeeByNameAndBeginContactNumber (@PathVariable karakterlánc neve, @MatrixVariable karakterlánc beginContactNumber) {List alkalmazottak listája = új ArrayList (); ... adja vissza az új ResponseEntity-t (alkalmazottak listája, HttpStatus.OK); }

Ennek eredményeként megkapjuk az összes alkalmazottat, akik rendelkeznek a kapcsolattartási számmal 22001 vagy akinek a neve János.

6. Az összes mátrix változó kötése

Ha valamilyen okból meg akarjuk szerezni az útvonalon elérhető összes változót, akkor a Térkép:

// localhost: 8080 / spring-mvc-java-2 / workerData / id = 1; név = John; contactNumber = 2200112334

Ezt a kérést a következő módszerrel kezeljük:

@GetMapping ("workerData / {worker}") @ResponseBody public ResponseEntity getEmployeeData (@MatrixVariable Map matrixVars) {return new ResponseEntity (matrixVars, HttpStatus.OK); }

Természetesen korlátozhatjuk a kötést az út egy adott részének mátrixváltozóihoz. Például, ha van egy ilyen kérésünk:

// localhost: 8080 / spring-mvc-java-2 / companyEmployee / id = 2; név = Xpto / alkalmazottData / id = 1; név = John; contactNumber = 2200112334

És csak az összes változót szeretnénk megszerezni, amelyhez tartozik workerData; akkor bemeneti paraméterként ezt kell használnunk:

@RequestMapping (value = "/ companyEmployee / {company} / workerData / {worker}", method = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeDataFromCompany (@MatrixVariable (pathVar = "alkalmazott") Map matrixVars) {...}

7. Részleges kötés

Az egyszerűség mellett a rugalmasság egy másik nyereség, a mátrixváltozók sokféleképpen használhatók. Például minden változót megkaphatunk minden egyes útszakaszból. Vegye figyelembe a következő kérést:

// localhost: 8080 / spring-mvc-java-2 / companyData / id = 2; név = Xpto / workerData / id = 1; név = John; contactNumber = 2200112334

Ha csak a mátrix változót akarjuk tudni név a companyData szegmens, akkor bemeneti paraméterként a következőket kell használnunk:

@MatrixVariable (érték = "név", pathVar = "vállalat") Karakterlánc neve 

8. Következtetés

Ez a cikk a mátrixváltozók felhasználásának néhány módját szemlélteti.

Elengedhetetlen annak megértése, hogy ez az új eszköz miként képes kezelni a túl összetett kérelmeket, vagy segít további paraméterek hozzáadásában a keresés körülhatárolásához.

Ezeknek a példáknak és kódrészleteknek a megvalósítása megtalálható egy GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.


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