Spring @RequestParam vs @PathVariable Annotations

1. Oversikt

I denne raske opplæringen vil vi utforske forskjellene mellom vårens @RequestParam og @PathVariable kommentarer.

@RequestParam og @PathVariable kan begge brukes til å trekke ut verdier fra forespørsels-URI, men de er litt forskjellige.

2. Spørringsparameter vs URI-bane

Samtidig som @RequestParams trekke ut verdier fra spørringsstrengen, @PathVariables trekke ut verdier fra URI-banen:

@GetMapping ("/ foos / {id}") @ResponseBody offentlig streng getFooById (@PathVariable streng-id) {return "ID:" + id; }

Deretter kan vi kartlegge basert på banen:

// localhost: 8080 / foos / abc ---- ID: abc

Og for @RequestParam, det blir:

@GetMapping ("/ foos") @ResponseBody offentlig streng getFooByIdUsingQueryParam (@RequestParam streng-id) {return "ID:" + id; }

Som vil gi oss den samme responsen, bare en annen URI:

// localhost: 8080 / foos? id = abc ---- ID: abc

3. Kodet mot nøyaktig verdi

Fordi @PathVariable trekker ut verdier fra URI-banen, er den ikke kodet. På den andre siden, @RequestParam er.

Ved hjelp av forrige eksempel, ab + c kommer tilbake som den er:

// localhost: 8080 / foos / ab + c ---- ID: ab + c

Men for en @RequestParam forespørsel, er parameteren URL-dekodet:

// localhost: 8080 / foos? id = ab + c ---- ID: ab c

4. Valgfrie verdier

Både @RequestParam og @PathVariable kan være valgfritt.

Vi kan lage @PathVariable valgfritt ved å bruke kreves attributt som begynner med våren 4.3.3:

@GetMapping ({"/ myfoos / optional", "/ myfoos / optional / {id}"}) @ResponseBody public String getFooByOptionalId (@PathVariable (required = false) Streng-id) {return "ID:" + id; }

Som vi da kan gjøre enten:

// localhost: 8080 / myfoos / valgfritt / abc ---- ID: abc 

eller:

// localhost: 8080 / myfoos / valgfritt ---- ID: null

Til @RequestParam, kan vi også bruke kreves Egenskap.

Noter det vi bør være forsiktige når vi lager @PathVariable valgfritt, for å unngå konflikter i stier.

5. Konklusjon

I denne artikkelen lærte vi forskjellene mellom @RequestParam og @PathVariable.

Den fullstendige kildekoden for eksemplene finner du på GitHub.


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