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.