Proljetne web bilješke

Ovaj je članak dio niza: • Proljetne temeljne bilješke

• Proljetne web bilješke (trenutni članak) • Proljetne bilješke pokretanja

• Bilješke o proljetnom rasporedu

• Proljetne bilješke podataka

• Bilješke proljetnog graha

1. Pregled

U ovom uputstvu istražit ćemo proljetne web bilješke s web stranice org.springframework.web.bind.annotation paket.

2. @RequestMapping

Jednostavno rečeno, @RequestMappingmetode obrađivača zahtjeva iznutra @Controller predavanja; može se konfigurirati pomoću:

  • staza, ili njegove pseudonime, Ime, i vrijednost: na koji je URL preslikana metoda
  • metoda: kompatibilne HTTP metode
  • parametri: filtrira zahtjeve na temelju prisutnosti, odsutnosti ili vrijednosti HTTP parametara
  • zaglavlja: filtrira zahtjeve na temelju prisutnosti, odsutnosti ili vrijednosti HTTP zaglavlja
  • troši: koje vrste medija metoda može konzumirati u tijelu HTTP zahtjeva
  • proizvodi: koje tipove medija metoda može proizvesti u tijelu HTTP odgovora

Evo kratkog primjera kako to izgleda:

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

Možemo pružiti zadane postavke za sve metode rukovatelja u a @Controller razred ako ovu bilješku primijenimo na razini predavanja. Jedini iznimka je URL koji Spring neće nadjačati s postavkama razine metode, ali dodaje dva dijela puta.

Na primjer, sljedeća konfiguracija ima isti učinak kao i ona gore:

@Controller @RequestMapping (value = "/ vozila", method = RequestMethod.GET) class VehicleController {@RequestMapping ("/ home") Niz home () {return "home"; }}

Štoviše, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, i @PatchMapping su različite varijante @RequestMapping s HTTP metodom koja je već postavljena na GET, POST, PUT, DELETE, odnosno PATCH.

Dostupni su od izdanja Spring 4.3.

3. @RequestBody

Krenimo na @RequestBody - koji mapira tijelo HTTP zahtjeva za objektom:

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

Deserijalizacija je automatska i ovisi o vrsti sadržaja zahtjeva.

4. @PathVariable

Dalje, razgovarajmo o tome @PathVariable.

Ova napomena ukazuje da a Argument metode vezan je za varijablu URI predloška. URI obrazac možemo odrediti pomoću @RequestMapping bilješku i vežu argument metode na jedan od dijelova predloška s @PathVariable.

To možemo postići pomoću Ime ili njegov alias, vrijednost argument:

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

Ako se naziv dijela u predlošku podudara s imenom argumenta metode, ne moramo ga navesti u bilješci:

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

Štoviše, varijablu puta možemo označiti neobavezno postavljanjem argumenta potreban lažno:

@RequestMapping ("/ {id}") vozilo getVehicle (@PathVariable (required = false) long id) {// ...}

5. @RequestParam

Koristimo @RequestParam za pristup parametrima HTTP zahtjeva:

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

Ima iste mogućnosti konfiguracije kao i @PathVariable bilješka.

Uz te postavke, sa @RequestParam možemo navesti ubrizganu vrijednost kada Spring u zahtjevu ne pronađe nikakvu ili praznu vrijednost. Da bismo to postigli, moramo postaviti zadana vrijednost argument.

Pružanje zadane vrijednosti implicitno postavlja potreban do lažno:

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

Osim parametara, postoje i ostali dijelovi HTTP zahtjeva kojima možemo pristupiti: kolačići i zaglavlja. Možemo im pristupiti s bilješkama @CookieValue i @RequestHeader odnosno.

Možemo ih konfigurirati na isti način kao i @RequestParam.

6. Bilješke o rukovanju odgovorima

U sljedećim odjeljcima vidjet ćemo najčešće napomene za manipulaciju HTTP odgovorima u Spring MVC-u.

6.1. @ResponseBody

Ako označimo metodu obrade zahtjeva s @ResponseBody,Proljeće rezultat metode tretira kao sam odgovor:

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

Ako označimo a @Controller klase s ovom napomenom, koristit će je sve metode obrade zahtjeva.

6.2. @ExceptionHandler

Ovom bilješkom možemo proglasiti a metoda obrade prilagođenih pogrešaka. Spring poziva ovu metodu kada metoda rukovatelja zahtjevima izbaci bilo koju od navedenih iznimki.

Uhvaćena iznimka može se metodi proslijediti kao argument:

@ExceptionHandler (IllegalArgumentException.class) void onIllegalArgumentException (IllegalArgumentException iznimka) {// ...}

6.3. @ResponseStatus

Možemo odrediti željeni HTTP status odgovora ako ovom bilješkom označimo metodu obrade zahtjeva. Statusni kod možemo proglasiti pomoću kodirati argument ili njegov zamjenski naziv vrijednost argument.

Također, možemo navesti razlog koristeći razlog argument.

Također ga možemo koristiti zajedno s @ExceptionHandler:

@ExceptionHandler (IllegalArgumentException.class) @ResponseStatus (HttpStatus.BAD_REQUEST) void onIllegalArgumentException (IllegalArgumentException iznimka) {// ...}

Za više informacija o statusu HTTP odgovora posjetite ovaj članak.

7. Ostale web bilješke

Neke bilješke ne upravljaju izravno HTTP zahtjevima ili odgovorima. U sljedećim odjeljcima predstavit ćemo najčešće.

7.1. @Controller

Spring MVC kontroler možemo definirati pomoću @Controller. Za više informacija posjetite naš članak o bilješkama proljetnog graha.

7.2. @RestController

The @RestControllerkombinira @Controller i @ResponseBody.

Stoga su sljedeće izjave ekvivalentne:

@Controller @ResponseBody class VehicleRestController {// ...}
Klasa @RestController VehicleRestController {// ...}

7.3. @ModelAttribute

Ovom bilješkom možemo pristupni elementi koji su već u modelu MVC-a @Controller, davanjem ključa modela:

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

Kao kod @PathVariable i @RequestParam, ne moramo navesti ključ modela ako argument ima isto ime:

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

Osim, @ModelAttribute ima drugu namjenu: ako njime označimo neku metodu, Spring će automatski dodaje povratnu vrijednost metode modelu:

@ModelAttribute ("vozilo") Vozilo getVehicle () {// ...}

Kao i prije, ne moramo navesti ključ modela, Spring prema zadanim postavkama koristi ime metode:

@ModelAttribute Vozilo za vozilo () {// ...}

Prije nego što Spring pozove metodu obrade zahtjeva, on poziva sve @ModelAttribute anotirane metode u razredu.

Više informacija o @ModelAttribute možete pronaći u ovom članku.

7.4. @CrossOrigin

@CrossOriginomogućuje komunikaciju između domena za anotirane metode rukovatelja zahtjevima:

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

Ako njime označimo klasu, to se odnosi na sve metode obrade zahtjeva u njoj.

Argumentima ove bilješke možemo fino prilagoditi ponašanje CORS-a.

Za više detalja posjetite ovaj članak.

8. Zaključak

U ovom smo članku vidjeli kako možemo obrađivati ​​HTTP zahtjeve i odgovore pomoću Spring MVC-a.

Kao i obično, primjeri su dostupni na GitHubu.

Sljedeći » Bilješke za proljetne čizme « Prethodne proljetne jezgrene bilješke