Proljetna bilješka @RequestParam

1. Pregled

U ovom brzom vodiču istražit ćemo Proljeće @RequestParam bilješka i njezini atributi.

Jednostavno rečeno, možemo koristiti @RequestParam za izdvajanje parametara upita, parametara obrasca, pa čak i datoteka iz zahtjeva.

2. Jednostavno mapiranje

Recimo da imamo krajnju točku / api / foos koji uzima parametar upita koji se naziva iskaznica:

@GetMapping ("/ api / foos") @ResponseBody javni niz getFoos (@RequestParam String id) {return "ID:" + id; }

U ovom smo primjeru koristili @RequestParam izvući iskaznica parametar upita.

Pozvao bi se jednostavan zahtjev GET getFoos:

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

Sljedeći, pogledajmo atribute napomene: Ime, vrijednost, potreban, i zadana vrijednost.

3. Određivanje naziva parametra zahtjeva

U prethodnom su primjeru i ime varijable i ime parametra isto.

Ponekad ipak želimo da ovo bude drugačije. Ili, ako ne koristimo Spring Boot, možda ćemo trebati napraviti posebnu konfiguraciju vremena kompajliranja ili imena parametara zapravo neće biti u bytecodeu.

Srećom, možemo konfigurirati @RequestParam ime pomoću Ime atribut:

@PostMapping ("/ api / foos") @ResponseBody javni niz addFoo (@RequestParam (name = "id") String fooId, @RequestParam String name) {return "ID:" + fooId + "Name:" + name; }

Možemo i mi @RequestParam (vrijednost = “id”) ili samo @RequestParam (“id”).

4. Izborni parametri zahtjeva

Parametri metode označeni s @RequestParam su zadani.

To znači da ćemo, ako parametar nije prisutan u zahtjevu, dobiti pogrešku:

GET / api / foos HTTP / 1.1 ----- 400 Potreban je loš zahtjev Parametar niza 'id' nije prisutan

Možemo konfigurirati naš @RequestParam biti neobvezan, s tim što potreban atribut:

@GetMapping ("/ api / foos") @ResponseBody javni niz getFoos (@RequestParam (obavezno = netačno) ID niza) {return "ID:" + id; }

U ovom slučaju oboje:

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

i

// localhost: 8080 / api / foos ---- ID: null

ispravno će se pozvati na metodu.

Kada parametar nije naveden, parametar metode je vezan za null.

4.1. Korištenje Jave 8 Neobvezno

Parametar možemo omotati i Neobvezno:

@GetMapping ("/ api / foos") @ResponseBody javni niz getFoos (@RequestParam Izborni id) {return "ID:" + id.orElseGet (() -> "nije naveden"); }

U ovom slučaju, ne trebamo navesti potreban atribut.

A zadana vrijednost će se koristiti ako parametar zahtjeva nije naveden:

// localhost: 8080 / api / foos ---- ID: nije naveden

5. Zadana vrijednost za parametar zahtjeva

Također možemo postaviti zadanu vrijednost na @RequestParam pomoću zadana vrijednost atribut:

@GetMapping ("/ api / foos") @ResponseBody javni niz getFoos (@RequestParam (defaultValue = "test") ID niza) {return "ID:" + id; }

Ovo je kao obavezno = lažno, u tome što korisnik više ne treba dostavljati parametar:

// localhost: 8080 / api / foos ---- ID: test

Iako smo još uvijek u mogućnosti pružiti ga:

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

Imajte na umu da kada postavimo zadana vrijednost atribut, potreban je doista postavljen na lažno.

6. Mapiranje svih parametara

Također možemo imati više parametara bez definiranja njihovih imena ili računajte samo pomoću a Karta:

@PostMapping ("/ api / foos") @ResponseBody javni niz updateFoos (@RequestParam Map allParams) {return "Parametri su" + allParams.entrySet (); }

koji će zatim odražavati natrag sve poslane parametre:

curl -X POST -F 'name = abc' -F 'id = 123' // localhost: 8080 / api / foos ----- Parametri su {[name = abc], [id = 123]}

7. Mapiranje parametra s više vrijednosti

Samac @RequestParam može imati više vrijednosti:

@GetMapping ("/ api / foos") @ResponseBody javni niz getFoos (@RequestParam id popisa) {return "ID-ovi su" + id; }

A Spring MVC preslikavat će zarez iskaznica parametar:

// localhost: 8080 / api / foos? id = 1,2,3 ---- ID-ovi su [1,2,3]

ili popis zasebnih iskaznica parametri:

// localhost: 8080 / api / foos? id = 1 & id = 2 ---- ID-ovi su [1,2]

8. Zaključak

U ovom smo članku naučili kako koristiti @RequestParam.

Potpuni izvorni kod za primjere može se naći u projektu GitHub.