Stručný sprievodca jarnými maticovými premennými MVC

1. Prehľad

Špecifikácia URI RFC 3986 definovala parametre cesty URI ako páry názov-hodnota. Matičné premenné sú jarným termínom a alternatívnou implementáciou na odovzdávanie a analýzu parametrov cesty URI.

Podpora maticových premenných bola sprístupnená na jar MVC 3.2 a je určená zjednodušiť požiadavky s veľkým počtom parametrov.

V tomto článku si ukážeme, ako môžeme zjednodušiť zložité požiadavky GET, ktoré používajú variabilné alebo voliteľné parametre cesty vo vnútri rôznych segmentov cesty URI.

2. Konfigurácia

Ak chcete povoliť jarné maticové premenné MVC, začnime s konfiguráciou:

@Configuration verejná trieda WebConfig implementuje WebMvcConfigurer {@Override public void configurePathMatch (konfigurátor PathMatchConfigurer) {UrlPathHelper urlPathHelper = nový UrlPathHelper (); urlPathHelper.setRemoveSemicolonContent (false); configurer.setUrlPathHelper (urlPathHelper); }}

V opačnom prípade sú predvolene zakázané.

3. Ako používať maticové premenné

Tieto premenné sa môžu objaviť v ktorejkoľvek časti cesty a znak equals („=“) sa používa na uvádzanie hodnôt a bodkočiarka („;“) na vymedzenie každej maticovej premennej. Na tej istej ceste môžeme tiež opakovať rovnaký názov premennej alebo oddeliť rôzne hodnoty pomocou čiarky („,“).

Náš príklad má kontrolór, ktorý poskytuje informácie o zamestnancoch. Každý zamestnanec má pracovnú oblasť a podľa tohto atribútu môžeme vyhľadávať. Na vyhľadávanie bolo možné použiť nasledujúcu požiadavku:

// localhost: 8080 / spring-mvc-java-2 / employeeArea / workingArea = rh, informatika, admin

alebo takto:

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

Ak sa chceme na tieto premenné odvolať v jarnom MVC, mali by sme použiť anotáciu @MatrixVariable.

V našich príkladoch použijeme Zamestnanec trieda:

public class Employee {private long id; súkromné ​​meno reťazca; private String contactNumber; // štandardní zakladatelia a obstarávatelia}

A tiež Spoločnosť trieda:

public class Company {private long id; súkromné ​​meno reťazca; // štandardní zakladatelia a obstarávatelia}

Tieto dve triedy budú viazať parametre požiadavky.

4. Definovanie vlastností maticových premenných

Pre premennú môžeme určiť požadované alebo predvolené vlastnosti. V nasledujúcom príklade je kontaktné číslo je povinný údaj, takže musí byť zahrnutý v našej ceste, napríklad takto:

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

Žiadosť bude vybavená nasledujúcim spôsobom:

@RequestMapping (value = "/ ZamestnanciKontakty / {contactNumber}", method = RequestMethod.GET) @ResponseBody Public ResponseEntity getEmployeeBycontactNumber (@MatrixVariable (povinné = true) reťazec contactNumber) {Zoznam zamestnancovList = nový ArrayList (); ... vrátiť novú ResponseEntity(zamestnanciList, HttpStatus.OK); }

Vďaka tomu získame všetkých zamestnancov, ktorí majú kontaktné číslo 223334411.

5. Parameter doplnku

Premenné matice môžu dopĺňať premenné cesty.

Napríklad hľadáme zamestnanca na jeho meno, ale môžeme zahrnúť aj počiatočné čísla jeho kontaktného čísla.

Žiadosť o toto vyhľadávanie by mala byť taká:

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

Žiadosť bude vybavená nasledujúcim spôsobom:

@RequestMapping (hodnota = "/ zamestnanci / {meno}", metóda = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeByNameAndBeginContactNumber (názov reťazca @PathVariable, reťazec @MatrixVariable beginContactNumber) {Zoznam zamestnancovList = nový ArrayList (); ... vrátiť nový ResponseEntity (ZamestnanciList, HttpStatus.OK); }

Vďaka tomu získame všetkých zamestnancov, ktorí majú kontaktné číslo 22001 alebo kto sa volá Ján.

6. Viazanie všetkých maticových premenných

Ak z nejakého dôvodu chceme získať všetky premenné, ktoré sú na ceste k dispozícii, môžeme ich spojiť s a Mapa:

// localhost: 8080 / spring-mvc-java-2 / employeeData / id = 1; name = John; contactNumber = 2200112334

Táto žiadosť bude vybavená nasledujúcim spôsobom:

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

Samozrejme môžeme obmedziť väzbu na maticové premenné konkrétnej časti cesty. Napríklad, ak máme takúto požiadavku:

// localhost: 8080 / spring-mvc-java-2 / companyEmployee / id = 2; name = Xpto / employeeData / id = 1; name = John; contactNumber = 2200112334

A chceme iba získať všetky premenné, ktoré patria údaje o zamestnancovi; potom by sme mali ako vstupný parameter použiť toto:

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

7. Čiastočná väzba

Okrem jednoduchosti je flexibilita ďalším ziskom, maticové premenné sa dajú použiť rôznymi spôsobmi. Napríklad môžeme získať každú premennú z každého segmentu cesty. Zvážte nasledujúcu žiadosť:

// localhost: 8080 / spring-mvc-java-2 / companyData / id = 2; name = Xpto / employeeData / id = 1; name = John; contactNumber = 2200112334

Keby sme chceli poznať iba maticovú premennú názov z companyData segment, potom by sme mali ako vstupný parameter použiť nasledujúce:

@MatrixVariable (value = "name", pathVar = "company") Názov reťazca 

8. Záver

Tento článok ilustroval niektoré z rôznych spôsobov, ako je možné používať maticové premenné.

Je nevyhnutné pochopiť, ako tento nový nástroj dokáže spracovať požiadavky, ktoré sú príliš zložité, alebo nám môžu pomôcť pridať viac parametrov na vymedzenie nášho vyhľadávania.

Implementáciu všetkých týchto príkladov a útržkov kódu nájdete v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a spustiť tak, ako je.