Kratki vodič za proljetne MVC matrične varijable

1. Pregled

URI specifikacija RFC 3986 definirala je parametre URI staze kao parove ime-vrijednost. Matrijske varijable izraz je skovan u proljeće i alternativna implementacija za prosljeđivanje i raščlanjivanje parametara URI puta.

Podrška za matrične varijable postala je dostupna u Spring MVC 3.2 i namijenjena joj je pojednostaviti zahtjeve s velikim brojem parametara.

U ovom ćemo članku pokazati kako možemo pojednostavniti složene GET zahtjeve koji koriste varijabilne ili neobavezne parametre puta unutar različitih segmenata staze URI-ja.

2. Konfiguracija

Da bismo omogućili Spring MVC matrične varijable, krenimo s konfiguracijom:

@Configuration javna klasa WebConfig implementira WebMvcConfigurer {@Override public void configurePathMatch (PathMatchConfigurer configurer) {UrlPathHelper urlPathHelper = new UrlPathHelper (); urlPathHelper.setRemoveSemicolonContent (false); configurer.setUrlPathHelper (urlPathHelper); }}

Inače su prema zadanim postavkama onemogućeni.

3. Kako koristiti matrične varijable

Te se varijable mogu pojaviti u bilo kojem dijelu puta, a znak jednako ("=") koristi se za davanje vrijednosti, a točka-zarez (';') za ograničavanje svake matrične varijable. Na istom putu također možemo ponoviti isto ime varijable ili odvojiti različite vrijednosti pomoću znakovne zareze (‘,’).

Naš primjer ima kontroler koji pruža informacije o zaposlenicima. Svaki zaposlenik ima radno područje i mi možemo pretraživati ​​prema tom atributu. Za pretraživanje se može koristiti sljedeći zahtjev:

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

ili ovako:

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

Kada se želimo osvrnuti na ove varijable u Spring MVC, trebali bismo upotrijebiti napomenu @MatrixVariable.

U našim ćemo primjerima koristiti Zaposlenik razred:

zaposlenik u javnoj klasi {private long id; privatni naziv niza; private String contactNumber; // standardni postavljači i dobivači}

I također Društvo razred:

javna klasa tvrtka {private long id; privatni naziv niza; // standardni postavljači i dobivači}

Te će dvije klase vezati parametre zahtjeva.

4. Definiranje svojstava varijabli matrice

Za varijablu možemo odrediti potrebna ili zadana svojstva. U sljedećem primjeru, kontakt broj je potreban, pa mora biti uključen u naš put, otprilike ovako:

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

Zahtjev će se obraditi na sljedeći način:

@RequestMapping (value = "/ zaposleniciContacts / {contactNumber}", method = RequestMethod.GET) @ResponseBody javni ResponseEntity getEfficieeBycontactNumber (@MatrixVariable (required = true) String contactNumber) {Popis zaposlenihList = novi ArrayList (); ... vrati novi ResponseEntity(zaposlenList, HttpStatus.OK); }

Kao rezultat, dobit ćemo sve zaposlenike koji imaju kontakt broj 223334411.

5. Parametar komplementa

Matrične varijable mogu nadopunjavati varijable puta.

Na primjer, tražimo zaposlenika da bi se pronašlo njegovo ime, ali možemo uključiti i početne brojeve njegovog / njenog kontakt broja.

Zahtjev za ovo pretraživanje trebao bi biti ovakav:

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

Zahtjev će se obraditi na sljedeći način:

@RequestMapping (value = "/ zaposlenici / {ime}", metoda = RequestMethod.GET) @ResponseBody javni ResponseEntity getEfficieeByNameAndBeginContactNumber (@PathVariable String name, @MatrixVariable String beginContactNumber) {Popis zaposlenihList = novi ArrayList (); ... vratiti novi ResponseEntity (zaposleniciPopis, HttpStatus.OK); }

Kao rezultat, dobit ćemo sve zaposlenike koji imaju kontakt broj 22001 ili čije je ime Ivan.

6. Povezivanje svih matričnih varijabli

Ako iz nekog razloga želimo dobiti sve varijable dostupne na putu, možemo ih povezati s Karta:

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

Ovaj će se zahtjev rješavati na sljedeći način:

@GetMapping ("workerData / {worker}") @ResponseBody javni ResponseEntity getEfficieeData (@MatrixVariable Map matrixVars) {vratiti novi ResponseEntity (matrixVars, HttpStatus.OK); }

Naravno, možemo ograničiti vezanje na matrične varijable određenog dijela puta. Na primjer, ako imamo ovakav zahtjev:

// localhost: 8080 / spring-mvc-java-2 / companyE Employee / id = 2; name = Xpto / workerData / id = 1; name = John; kontaktNumber = 2200112334

A mi želimo dobiti samo sve varijable koje pripadaju Podaci o zaposleniku; tada bismo kao ulazni parametar trebali koristiti ovo:

@RequestMapping (value = "/ companyE Employee / {company} / workerData / {worker}", method = RequestMethod.GET) @ResponseBody javni ResponseEntity getEfficieeDataFromCompany (@MatrixVariable (pathVar = "zaposlenik") Map matrixVars) {...}

7. Djelomično vezanje

Osim jednostavnosti, fleksibilnost je još jedan dobitak, matrične varijable mogu se koristiti na razne različite načine. Na primjer, možemo dobiti svaku varijablu iz svakog segmenta puta. Razmotrite sljedeći zahtjev:

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

Ako samo želimo znati matričnu varijablu Ime od Podaci o tvrtki segmenta, tada bismo trebali koristiti kao ulazni parametar sljedeće:

@MatrixVariable (value = "name", pathVar = "company") Naziv niza 

8. Zaključak

Ovaj je članak ilustrirao neke od različitih načina na koje se matrične varijable mogu koristiti.

Bitno je razumjeti kako se ovaj novi alat može nositi s prekompliciranim zahtjevima ili nam pomoći da dodamo više parametara koji ograničavaju naše pretraživanje.

Provedbu svih ovih primjera i isječaka koda možete pronaći u projektu GitHub - ovo je projekt zasnovan na Mavenu, pa bi ga trebalo lako uvesti i pokrenuti kakav jest.


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