En rask guide til våren MVC Matrix Variables

1. Oversikt

URI-spesifikasjonen RFC 3986 definerte URI-baneparametere som navn-verdipar. Matrixvariabler er et vårmynt begrep og en alternativ implementering for overføring og analyse av URI-baneparametere.

Støtte for matrixvariabler ble tilgjengelig i vår MVC 3.2 og er ment å forenkle forespørsler med et stort antall parametere.

I denne artikkelen vil vi vise hvordan vi kan forenkle komplekse GET-forespørsler som bruker enten variable eller valgfrie baneparametere i de forskjellige banesegmentene til en URI.

2. Konfigurasjon

For å aktivere Spring MVC Matrix Variables, la oss starte med konfigurasjonen:

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

Ellers er de deaktivert som standard.

3. Hvordan bruke matrisevariabler

Disse variablene kan vises i hvilken som helst del av banen, og tegnet er lik (“=”) brukes til å gi verdier og semikolonet (‘;’) for å avgrense hver matriksvariabel. På samme bane kan vi også gjenta det samme variabelnavnet eller skille forskjellige verdier ved hjelp av tegnet komma (‘,’).

Eksemplet vårt har en kontroller som gir informasjon om de ansatte. Hver ansatt har et arbeidsområde, og vi kan søke etter det attributtet. Følgende forespørsel kan brukes til å søke:

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

eller slik:

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

Når vi vil referere til disse variablene i Spring MVC, bør vi bruke kommentaren @MatrixVariable.

I eksemplene våre vil vi bruke Ansatt klasse:

offentlig klasse ansatt {privat lang id; privat strengnavn; privat streng kontaktNummer; // standard setters og getters}

Og også Selskap klasse:

offentlig klasse Company {privat lang id; privat strengnavn; // standard setters og getters}

Disse to klassene vil binde forespørselsparametrene.

4. Definere Matrix Variable Properties

Vi kan spesifisere nødvendige eller standardegenskaper for variabelen. I det følgende eksemplet, kontakt nummer kreves, så det må inkluderes i vår vei, noe sånt som dette:

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

Forespørselen vil bli håndtert på følgende måte:

@RequestMapping (value = "/ workersContacts / {contactNumber}", method = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeBycontactNumber (@MatrixVariable (obligatorisk = true) String contactNumber) {List ansatteListe = ny ArrayList (); ... returner nye ResponseEntity(ansatteListe, HttpStatus.OK); }

Som et resultat vil vi få alle de ansatte som har kontaktnummeret 223334411.

5. Komplementparameter

Matrixvariabler kan utfylle banevariabler.

For eksempel søker vi etter en ansatt etter hans / hennes navn, men vi kan også inkludere startnummerene til hans / hennes kontaktnummer.

Forespørselen om dette søket bør være slik:

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

Forespørselen vil bli håndtert på følgende måte:

@RequestMapping (verdi = "/ ansatte / {name}", metode = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeByNameAndBeginContactNumber (@PathVariable String name, @MatrixVariable String beginContactNumber) {List workersList = new ArrayList (); ... returner nye ResponseEntity (ansatteListe, HttpStatus.OK); }

Som et resultat vil vi få alle de ansatte som har kontaktnummeret 22001 eller hvis navn er John.

6. Binding av alle matrisevariabler

Hvis vi av en eller annen grunn ønsker å få alle variablene som er tilgjengelige på banen, kan vi binde dem til a Kart:

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

Denne forespørselen vil bli håndtert på følgende måte:

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

Selvfølgelig kan vi begrense binding til matrisevariablene til en bestemt del av banen. For eksempel hvis vi har en forespørsel som denne:

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

Og vi vil bare få alle variablene som hører til ansattData; så bør vi bruke dette som inngangsparameter:

@RequestMapping (verdi = "/ companyEmployee / {company} / employeeData / {ansatte}", metode = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeDataFromCompany (@MatrixVariable (pathVar = "ansatt") KartmatrixVars) {...}

7. Delbinding

Bortsett fra enkelhet, er fleksibilitet en annen gevinst, matrisevariabler kan brukes på en rekke forskjellige måter. For eksempel kan vi få hver variabel fra hvert banesegment. Vurder følgende forespørsel:

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

Hvis vi bare vil vite matriksvariabelen Navn av firmadata segment, så bør vi bruke som inngangsparameter følgende:

@MatrixVariable (value = "name", pathVar = "company") Navn på streng 

8. Konklusjon

Denne artikkelen illustrerte noen av de forskjellige måtene matrisevariabler kan brukes på.

Det er viktig å forstå hvordan dette nye verktøyet kan håndtere forespørsler som er for komplekse, eller som hjelper oss å legge til flere parametere for å avgrense søket.

Implementeringen av alle disse eksemplene og kodebitene kan bli funnet i et GitHub-prosjekt - dette er et Maven-basert prosjekt, så det skal være enkelt å importere og kjøre som det er.


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