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.