Anotácia Spring @RequestParam

1. Prehľad

V tomto rýchlom výučbe sa pozrieme na jar @RequestParam anotácia a jej atribúty.

Jednoducho povedané, môžeme použiť @RequestParam na extrahovanie parametrov dotazu, parametrov formulárov a dokonca aj súborov z požiadavky.

2. Jednoduché mapovanie

Povedzme, že máme koncový bod / api / foos ktorý prevezme volaný parameter dotazu id:

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

V tomto príklade sme použili @RequestParam extrahovať id parameter dopytu.

Vyvolala by sa jednoduchá požiadavka GET getFoos:

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

Ďalšie, Pozrime sa na atribúty anotácie: názov, hodnotu, požadovanýa predvolená hodnota.

3. Zadanie názvu parametra požiadavky

V predchádzajúcom príklade sú názov premennej aj názov parametra rovnaké.

Niekedy však chceme, aby to bolo inak. Alebo ak nepoužívame Spring Boot, možno budeme musieť urobiť špeciálnu konfiguráciu v čase kompilácie, inak nebudú názvy parametrov v bajkóde.

Našťastie môžeme nakonfigurovať @RequestParam meno pomocou názov atribút:

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

Môžeme aj robiť @RequestParam (hodnota = „id“) alebo len tak @RequestParam („id“).

4. Nepovinné parametre požiadavky

Parametre metódy s poznámkou @RequestParam sú predvolene požadované.

To znamená, že ak parameter nie je uvedený v žiadosti, zobrazí sa chyba:

GET / api / foos HTTP / 1.1 ----- 400 Vyžaduje sa nesprávna požiadavka. Reťazcový parameter „id“ nie je k dispozícii

Môžeme nakonfigurovať naše @RequestParam byť voliteľný s požadovaný atribút:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam (required = false) String id) {return "ID:" + id; }

V takom prípade obidve:

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

a

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

správne vyvolá metódu.

Ak parameter nie je zadaný, parameter metódy je viazaný na nulový.

4.1. Používanie Java 8 Voliteľné

Alternatívne môžeme parameter zabaliť do Voliteľné:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam Voliteľné ID) {návrat "ID:" + id.orElseGet (() -> "nie je poskytované"); }

V tomto prípade, nemusíme špecifikovať požadovaný atribút.

Ak nie je uvedený parameter požiadavky, použije sa predvolená hodnota:

// localhost: 8080 / api / foos ---- ID: neposkytuje sa

5. Predvolená hodnota pre parameter požiadavky

Môžeme tiež nastaviť predvolenú hodnotu na @RequestParam pomocou predvolená hodnota atribút:

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

Toto je ako required = false, v tom, že užívateľ už nemusí dodávať parameter:

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

Aj keď sme v poriadku, môžeme to poskytnúť:

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

Všimnite si, že keď nastavíme predvolená hodnota atribút, požadovaný je skutočne nastavený na nepravdivé.

6. Mapovanie všetkých parametrov

Môžeme mať aj viac parametrov bez definovania ich mien alebo počítajte iba pomocou a Mapa:

@PostMapping ("/ api / foos") @ResponseBody public String updateFoos (@RequestParam Map allParams) {návrat "Parametre sú" + allParams.entrySet (); }

ktorý potom bude spätne odrážať všetky odoslané parametre:

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

7. Mapovanie parametra s viacerými hodnotami

Slobodný @RequestParam môže mať viac hodnôt:

@GetMapping ("/ api / foos") @ResponseBody public String getFoos (@RequestParam List id) {return "ID sú" + id; }

A jarné MVC bude mapovať čiarkami id parameter:

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

alebo zoznam samostatných id parametre:

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

8. Záver

V tomto článku sme sa naučili, ako používať @RequestParam.

Celý zdrojový kód príkladov nájdete v projekte GitHub.