En hurtig guide til forårsmVC-matrixvariabler

1. Oversigt

URI-specifikationen RFC 3986 definerede URI-sti-parametre som navn-værdipar. Matrixvariabler er et forårsmønstret udtryk og en alternativ implementering til overføring og parsering af URI-sti-parametre.

Understøttelse af matrixvariabler blev tilgængelig i Spring MVC 3.2 og er beregnet til forenkle anmodninger med et stort antal parametre.

I denne artikel viser vi, hvordan vi kan forenkle komplekse GET-anmodninger, der bruger enten variable eller valgfri styparametre inden for de forskellige stiksegmenter i en URI.

2. Konfiguration

For at aktivere Spring MVC Matrix Variables, lad os starte med konfigurationen:

@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 deaktiveret som standard.

3. Sådan bruges matrixvariabler

Disse variabler kan vises i en hvilken som helst del af stien, og tegnet er lig med (“=”) bruges til at give værdier og semikolonet (‘;’) til at afgrænse hver matrixvariabel. På den samme sti kan vi også gentage det samme variabelnavn eller adskille forskellige værdier ved hjælp af tegnet komma (',').

Vores eksempel har en controller, der giver information om medarbejderne. Hver medarbejder har et arbejdsområde, og vi kan søge efter den attribut. Følgende anmodning kunne bruges til søgning:

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

eller sådan:

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

Når vi vil henvise til disse variabler i Spring MVC, skal vi bruge kommentaren @MatrixVariable.

I vores eksempler bruger vi Medarbejder klasse:

offentlig klassemedarbejder {privat lang id; privat strengnavn; private String contactNumber; // standard settere og getters}

Og også Selskab klasse:

offentlig klasseselskab {privat lang id; privat strengnavn; // standard settere og getters}

Disse to klasser binder anmodningsparametrene.

4. Definition af Matrix Variable Properties

Vi kan specificere krævede eller standardegenskaber for variablen. I det følgende eksempel er kontakt nummer er påkrævet, så det skal inkluderes i vores vej, noget som dette:

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

Anmodningen håndteres efter følgende metode:

@RequestMapping (værdi = "/ ansatteContacts / {contactNumber}", metode = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeBycontactNumber (@MatrixVariable (krævet = sand) String contactNumber) {Liste medarbejdereListe = ny ArrayList (); ... returner ny ResponseEntity(medarbejderliste, HttpStatus.OK); }

Som et resultat får vi alle de ansatte, der har kontaktnummeret 223334411.

5. Suppleringsparameter

Matrixvariabler kan supplere stivariabler.

For eksempel søger vi en medarbejder efter hans / hendes navn, men vi kan også inkludere startnumrene på hans / hendes kontaktnummer.

Anmodningen om denne søgning skal være sådan:

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

Anmodningen håndteres efter følgende metode:

@RequestMapping (værdi = "/ medarbejdere / {navn}", metode = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeByNameAndBeginContactNumber (@PathVariable String name, @MatrixVariable String beginContactNumber) {List workersList = new ArrayList (); ... returner ny ResponseEntity (medarbejderliste, HttpStatus.OK); }

Som et resultat får vi alle de ansatte, der har kontaktnummeret 22001 eller hvis navn er John.

6. Binding af alle matrixvariabler

Hvis vi af en eller anden grund ønsker at få alle de variabler, der er tilgængelige på stien, kan vi binde dem til en Kort:

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

Denne anmodning håndteres efter følgende metode:

@GetMapping ("medarbejderData / {medarbejder}") @ResponseBody offentlig ResponseEntity getEmployeeData (@MatrixVariable Map matrixVars) {return new ResponseEntity (matrixVars, HttpStatus.OK); }

Selvfølgelig kan vi begrænse binding til matrixvariablerne for en bestemt del af stien. For eksempel, hvis vi har en anmodning som denne:

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

Og vi vil kun få alle de variabler, der hører til medarbejderdata; så skal vi bruge dette som inputparameter:

@RequestMapping (værdi = "/ companyEmployee / {company} / medarbejderData / {medarbejder}", metode = RequestMethod.GET) @ResponseBody public ResponseEntity getEmployeeDataFromCompany (@MatrixVariable (pathVar = "medarbejder") KortmatrixVars) {...}

7. Delbinding

Bortset fra enkelhed er fleksibilitet en anden gevinst, matrixvariabler kan bruges på en række forskellige måder. For eksempel kan vi hente hver variabel fra hvert stisegment. Overvej følgende anmodning:

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

Hvis vi kun vil kende matrixvariablen navn af firmadata segment, så skal vi bruge som inputparameter følgende:

@MatrixVariable (værdi = "navn", stiVar = "firma") Navn på streng 

8. Konklusion

Denne artikel illustrerede nogle af de forskellige måder, hvorpå matrixvariabler kan bruges.

Det er vigtigt at forstå, hvordan dette nye værktøj kan håndtere anmodninger, der er for komplekse eller hjælper os med at tilføje flere parametre til at afgrænse vores søgning.

Implementeringen af ​​alle disse eksempler og kodestykker findes i et GitHub-projekt - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.


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