Spring @Pathvariable Annotation

1. Oversikt

I denne raske opplæringen vil vi utforske vårens @PathVariable kommentar.

For å si det enkelt, de @PathVariable merknader kan brukes til å håndtere malvariabler i URI-kartleggingen, og bruk dem som metodeparametere.

La oss se hvordan du bruker @PathVariable og dets forskjellige attributter.

2. En enkel kartlegging

En enkel brukstilfelle for @PathVariable kommentar ville være et sluttpunkt som identifiserer en enhet med en primærnøkkel:

@GetMapping ("/ api / ansatte / {id}") @ResponseBody offentlig streng getEmployeesById (@PathVariable streng-id) {return "ID:" + id; }

I dette eksemplet bruker vi @PathVariable kommentar for å trekke ut den malede delen av URI representert av variabelen {id}.

En enkel FÅ forespørsel til / api / ansatte / {id} vil påkalle getEmployeesById med den ekstraherte id-verdien:

// localhost: 8080 / api / ansatte / 111 ---- ID: 111

La oss nå utforske denne kommentaren og se på egenskapene til den.

3. Spesifisere navn på banen

I forrige eksempel hoppet vi over å definere navnet på malbanevariabelen siden navnene på metodeparameteren og banevariabelen var de samme.

Imidlertid, hvis banevariabelnavnet er annerledes, kan vi spesifisere det i argumentet til @PathVariable kommentar:

@GetMapping ("/ api / workerswithvariable / {id}") @ResponseBody public String getEmployeesByIdWithVariableName (@PathVariable ("id") StrengmedarbeiderId) {return "ID:" + medarbeider-ID; }
// localhost: 8080 / api / ansatte med variabel / 1 ---- ID: 1

Vi kan også definere banevariabelnavnet som @PathVariable (verdi = ”id”) i stedet for PathVariable (“id”) for klarhet.

4. Flere banevariabler i en enkelt forespørsel

Avhengig av brukssaken, vi kan ha mer enn en sti-variabel i vår URI for en kontrollermetode, som også har flere metodeparametere:

@GetMapping ("/ api / ansatte / {id} / {name}") @ResponseBody offentlig streng getEmployeesByIdAndName (@PathVariable streng-id, @PathVariable strengnavn) {return "ID:" + id + ", navn:" + navn ; }
// localhost: 8080 / api / ansatte / 1 / bar ---- ID: 1, navn: bar

Vi kan også håndtere mer enn en @PathVariable parametere ved hjelp av en metodeparameter av typen java.util.Kart:

@GetMapping ("/ api / workerswithmapvariable / {id} / {name}") @ResponseBody public String getEmployeesByIdAndNameWithMapVariable (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); Strengnavn = pathVarsMap.get ("navn"); hvis (id! = null && navn! = null) {return "ID:" + id + ", navn:" + navn; } annet {returner "Manglende parametere"; }}
// localhost: 8080 / api / ansatte / 1 / bar ---- ID: 1, navn: bar

Det er imidlertid en liten fangst mens du håndterer flere @PathVariable parametere når banevariabelstrengen inneholder et punktum (.). Vi har diskutert disse hjørnesakene i detalj her.

5. Valgfrie banevariabler

På våren er metodeparametere merket med @PathVariable kreves som standard:

@GetMapping (value = {"/ api / workerswithrequired", "/ api / workerswithrequired / {id}"}) @ResponseBody public String getEmployeesByIdWithRequired (@PathVariable String id) {return "ID:" + id; }

Av hvordan det ser ut, skal kontrolleren ovenfor håndtere begge deler / api / ansatte uten behov og / api / ansatte uten behov / 1 be om stier. Men siden metodeparametere er kommentert av @PathVariables er obligatorisk som standard, håndterer den ikke forespørslene som sendes til / api / ansatte uten behov sti:

// localhost: 8080 / api / workerswithrequired ---- {"timestamp": "2020-07-08T02: 20: 07.349 + 00: 00", "status": 404, "error": "Not Found", " melding ":" "," path ":" / api / workerswithrequired "}  // localhost: 8080 / api / ansatte uten behov / 1 ---- ID: 111

Vi kan takle dette på to måter.

5.1. Omgivelser @PathVariable som ikke påkrevd

Vi kan stille inn kreves tilhører @PathVariable til falsk for å gjøre det valgfritt. Derfor, når vi endrer vårt forrige eksempel, kan vi nå håndtere URI-versjonene med og uten banevariabelen:

@GetMapping (value = {"/ api / workerswithrequiredfalse", "/ api / workerswithrequiredfalse / {id}"}) @ResponseBody public String getEmployeesByIdWithRequiredFalse (@PathVariable (required = false) Streng-id) {if (id! = Null) { returner "ID:" + id; } annet {return "ID mangler"; }}
// localhost: 8080 / api / workerswithrequiredfalse ---- ID mangler

5.2. Ved hjelp av java.util. valgfritt

Siden våren 4.1 kan vi også bruke java.util. valgfritt (tilgjengelig i Java 8+) for å håndtere en ikke-obligatorisk banevariabel:

@GetMapping (value = {"/ api / workerswithoptional", "/ api / workerswithoptional / {id}"}) @ResponseBody public String getEmployeesByIdWithOptional (@PathVariable Optional id) {if (id.isPresent ()) {return "ID: "+ id.get (); } annet {return "ID mangler"; }}

Nå, hvis vi ikke spesifiserer banevariabelen id i forespørselen får vi standardsvaret:

// localhost: 8080 / api / ansatte uten opsjon ---- ID mangler 

5.3. Bruke en metodeparameter av typen Kart

Som vist tidligere, kan vi bruke en enkelt parameterparameter av typen java.util.Kart for å håndtere alle banevariablene i URI for forespørsel. Vi kan også bruke denne strategien til å håndtere den valgfrie stevariabelen:

@GetMapping (verdi = {"/ api / workerswithmap / {id}", "/ api / workerswithmap"}) @ResponseBody public String getEmployeesByIdWithMap (@PathVariable Map pathVarsMap) {String id = pathVarsMap.get ("id"); hvis (id! = null) {return "ID:" + id; } annet {return "ID mangler"; }}

6. Standardverdi for @PathVariable

Ut av boksen er det ikke en bestemmelse som definerer en standardverdi for metodeparametere som er merket med @PathVariable. Vi kan imidlertid bruke de samme strategiene som er diskutert ovenfor for å tilfredsstille standardverdisaken for @PathVariable. Vi trenger bare å se etter null på sti-variabelen.

For eksempel ved å bruke java.util. valgfritt, kan vi identifisere om banevariabelen er null eller ikke. Hvis det er null så kan vi bare svare på forespørselen med en standardverdi:

@GetMapping (value = {"/ api / defaultemployeeswithoptional", "/ api / defaultemployeeswithoptional / {id}"}) @ResponseBody public String getDefaultEmployeesByIdWithOptional (@PathVariable Optional id) {if (id.isPresent ()) {return "ID: "+ id.get (); } annet {return "ID: Standard ansatt"; }}

7. Konklusjon

I denne artikkelen diskuterte vi hvordan du bruker Spring's @PathVariable kommentar. Vi identifiserte også de forskjellige måtene å effektivt bruke @PathVariable merknader som passer forskjellige bruksområder som valgfrie parametere og håndtering av standardverdier.

Kodeeksemplet vist i denne artikkelen er også tilgjengelig på Github.


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