Jarné webové anotácie

Tento článok je súčasťou série: • Jarné základné anotácie

• Spring Web Annotations (aktuálny článok) • Spring Boot Annotations

• Anotácie jarného plánovania

• Jarné anotácie údajov

• Anotácie jarných bôbov

1. Prehľad

V tomto návode preskúmame anotácie Spring Web z webu org.springframework.web.bind.annotation balíček.

2. @RequestMapping

Jednoducho povedané, @RequestMappingmetódy vybavovania požiadaviek na značky vo vnútri @ Kontrolór triedy; dá sa nakonfigurovať pomocou:

  • cesta, alebo jeho aliasy, názov, a hodnota: na ktorú adresu URL je metóda namapovaná
  • metóda: kompatibilné metódy HTTP
  • parametre: filtruje požiadavky na základe prítomnosti, neprítomnosti alebo hodnoty parametrov HTTP
  • hlavičky: filtruje požiadavky na základe prítomnosti, neprítomnosti alebo hodnoty hlavičiek HTTP
  • konzumuje: ktoré typy médií môže metóda spotrebovať v tele požiadavky HTTP
  • vyrába: aké typy médií môže metóda vytvoriť v tele odpovede HTTP

Tu je rýchly príklad toho, ako to vyzerá:

@Controller trieda VehicleController {@RequestMapping (value = "/ vehicles / home", method = RequestMethod.GET) Reťazec home () {návrat "domov"; }}

Môžeme poskytnúť predvolené nastavenie pre všetky metódy obsluhy v a @ Kontrolór trieda ak použijeme túto anotáciu na úrovni triedy. Jediný výnimkou je adresa URL, ktorú Spring neprepíše s nastavením úrovne metódy, ale pripojí dve časti cesty.

Napríklad nasledujúca konfigurácia má rovnaký účinok ako vyššie uvedená konfigurácia:

@Controller @RequestMapping (value = "/ vehicles", method = RequestMethod.GET) trieda VehicleController {@RequestMapping ("/ home") String home () {return "home"; }}

Navyše, @GetMapping, @PostMapping, @PutMapping, @DeleteMappinga @PatchMapping sú rôzne varianty @RequestMapping s metódou HTTP už nastavenou na GET, POST, PUT, DELETE a PATCH.

Dostupné sú od vydania verzie 4.3.

3. @RequestBody

Prejdime k @RequestBody - ktorý mapuje telo požiadavky HTTP na objekt:

@PostMapping ("/ save") void saveVehicle (@RequestBody Vehicle vehicle) {// ...}

Deserializácia je automatická a závisí od typu obsahu požiadavky.

4. @PathVariable

Ďalej si povieme niečo o @PathVariable.

Táto anotácia naznačuje, že a argument metódy je viazaný na premennú šablóny URI. Šablónu URI môžeme určiť pomocou @RequestMapping anotáciu a viazať argument metódy na jednu z častí šablóny pomocou @PathVariable.

To môžeme dosiahnuť pomocou názov alebo jeho alias, hodnotu argument:

@RequestMapping ("/ {id}") Vozidlo getVehicle (@PathVariable ("id") dlhé ID) {// ...}

Pokiaľ sa názov časti v šablóne zhoduje s názvom argumentu metódy, nemusíme ho v anotácii špecifikovať:

@RequestMapping ("/ {id}") Vozidlo getVehicle (@PathVariable long id) {// ...}

Ďalej môžeme premennú cesty označiť ako voliteľnú nastavením argumentu požadovaný na nepravdivé:

@RequestMapping ("/ {id}") Vozidlo getVehicle (@PathVariable (povinné = nepravdivé) dlhé ID) {// ...}

5. @RequestParam

Používame @RequestParam pre prístup k parametrom požiadavky HTTP:

@RequestMapping Vehicle getVehicleByParam (@RequestParam ("id") long id) {// ...}

Má rovnaké možnosti konfigurácie ako @PathVariable anotácia.

Okrem týchto nastavení s @RequestParam môžeme zadať vloženú hodnotu, keď Spring v žiadosti nenájde žiadnu alebo prázdnu hodnotu. Aby sme to dosiahli, musíme stanoviť predvolená hodnota argument.

Poskytnutie predvolenej hodnoty implicitne nastaví požadovaný do nepravda:

@RequestMapping ("/ buy") Car buyCar (@RequestParam (defaultValue = "5") int seatCount) {// ...}

Okrem parametrov existujú ďalšie časti požiadaviek HTTP, ku ktorým máme prístup: cookies a hlavičky. Máme k nim prístup pomocou anotácií @CookieValue a @RequestHeader resp.

Môžeme ich nakonfigurovať rovnako ako @RequestParam.

6. Anotácie spracovania odpovedí

V ďalších častiach uvidíme najbežnejšie anotácie na manipuláciu s odpoveďami HTTP v Spring MVC.

6.1. @ResponseBody

Ak označíme metódu obsluhy žiadosti s @ResponseBody,Jar považuje výsledok metódy za reakciu samotnú:

@ResponseBody @RequestMapping ("/ hello") String hello () {return "Hello World!"; }

Ak anotujeme a @ Kontrolór triedy s touto anotáciou, budú ju používať všetky metódy vybavovania požiadaviek.

6.2. @ExceptionHandler

Pomocou tejto anotácie môžeme vyhlásiť a vlastná metóda spracovania chýb. Jar volá túto metódu, keď metóda obsluhy žiadosti vyvolá niektorú zo zadaných výnimiek.

Zachytenú výnimku je možné odovzdať metóde ako argument:

@ExceptionHandler (IllegalArgumentException.class) void onIllegalArgumentException (výnimka IllegalArgumentException) {// ...}

6.3. @ResponseStatus

Môžeme určiť požadovaný stav HTTP odpovede ak touto anotáciou anotujeme metódu obsluhy požiadaviek. Stavový kód môžeme deklarovať pomocou kód argument alebo jeho alias, hodnotu argument.

Môžeme tiež uviesť dôvod pomocou dôvod argument.

Môžeme ho použiť aj spolu s @ExceptionHandler:

@ExceptionHandler (IllegalArgumentException.class) @ResponseStatus (HttpStatus.BAD_REQUEST) void onIllegalArgumentException (výnimka IllegalArgumentException) {// ...}

Ďalšie informácie o stave odpovede HTTP nájdete v tomto článku.

7. Ostatné webové anotácie

Niektoré anotácie priamo nespravujú požiadavky ani odpovede HTTP. V ďalších častiach si predstavíme tie najbežnejšie.

7.1. @ Kontrolór

Môžeme definovať Spring MVC radič s @ Kontrolór. Viac informácií nájdete v našom článku o anotáciách jarných bôbov.

7.2. @RestController

The @RestControllerkombinuje @ Kontrolór a @ResponseBody.

Preto sú nasledujúce vyhlásenia rovnocenné:

@Controller @ResponseBody trieda VehicleRestController {// ...}
@RestController trieda VehicleRestController {// ...}

7.3. @ModelAttribute

S touto anotáciou môžeme prístupové prvky, ktoré sú už v modeli MVC @ Kontrolór, poskytnutím modelového kľúča:

@PostMapping ("/ assemble") void assembleVehicle (@ModelAttribute ("vehicle") Vehicle vehicleInModel) {// ...}

Ako s @PathVariable a @RequestParam, ak má argument rovnaký názov, nemusíme určovať kľúč modelu:

@PostMapping ("/ assemble") void assembleVehicle (@ModelAttribute Vehicle vehicle) {// ...}

Okrem toho, @ModelAttribute má ďalšie použitie: ak ňou anotujeme metódu, bude to robiť Spring automaticky pridá do modelu návratovú hodnotu metódy:

@ModelAttribute ("vehicle") Vehicle getVehicle () {// ...}

Rovnako ako predtým nemusíme určovať kľúč modelu, Spring štandardne používa názov metódy:

@ModelAttribute Vehicle Vehicle () {// ...}

Predtým, ako Spring zavolá metódu obsluhy požiadaviek, vyvolá všetky @ModelAttribute anotované metódy v triede.

Viac informácií o @ModelAttribute nájdete v tomto článku.

7.4. @CrossOrigin

@CrossOriginumožňuje komunikáciu medzi doménami pre anotované metódy vybavovania požiadaviek:

@CrossOrigin @RequestMapping ("/ hello") String hello () {return "Hello World!"; }

Ak ním označíme triedu, platí to pre všetky metódy vybavovania požiadaviek v nej.

Správanie CORS môžeme doladiť pomocou argumentov tejto anotácie.

Viac podrobností nájdete v tomto článku.

8. Záver

V tomto článku sme videli, ako dokážeme vybaviť HTTP požiadavky a odpovede pomocou Spring MVC.

Ako obvykle sú príklady k dispozícii na GitHub.

Ďalšie » Anotácie jarného bootovania « Predchádzajúce jarné anotácie