Spring @RequestParam vs @PathVariable Annotations

1. Oversigt

I denne hurtige vejledning undersøger vi forskellene mellem forårets @RequestParam og @PathVariable kommentarer.

@RequestParam og @PathVariable kan begge bruges til at udtrække værdier fra anmodnings-URI, men de er lidt forskellige.

2. Forespørgselsparameter vs URI-sti

Mens @RequestParams udtræk værdier fra forespørgselsstrengen, @PathVariables udtræk værdier fra URI-stien:

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

Derefter kan vi kortlægge baseret på stien:

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

Og for @RequestParam, det vil være:

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

Hvilket ville give os det samme svar, bare en anden URI:

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

3. Kodet vs nøjagtig værdi

Fordi @PathVariable udtrækker værdier fra URI-stien, er den ikke kodet. På den anden side, @RequestParam er.

Ved hjælp af det foregående eksempel ab + c vender tilbage som den er:

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

Men for en @RequestParam anmodning, parameteren er URL-dekodet:

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

4. Valgfri værdier

Begge @RequestParam og @PathVariable kan være valgfri.

Vi kan lave @PathVariable valgfrit ved hjælp af krævet attribut startende med forår 4.3.3:

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

Hvilket vi så kan gøre enten:

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

eller:

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

Til @RequestParam, kan vi også bruge krævet attribut.

Noter det vi skal være forsigtige, når vi laver @PathVariable valgfri for at undgå konflikter i stier.

5. Konklusion

I denne artikel lærte vi forskellene mellem @RequestParam og @PathVariable.

Den fulde kildekode til eksemplerne kan findes på GitHub.


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