Forårswebkommentarer

Denne artikel er en del af en serie: • Spring Core Annotations

• Webnoteringer om foråret (nuværende artikel) • Annoncer om foråret

• Kommentarer om forårets planlægning

• Kommentarer om forårsdata

• Kommentarer om forårets bønner

1. Oversigt

I denne vejledning udforsker vi Spring Web-kommentarer fra org.springframework.web.bind.annotation pakke.

2. @RequestMapping

Kort fortalt, @RequestMappingmarkerer metoder til anmodningshåndtering inde @Kontrol klasser; den kan konfigureres ved hjælp af:

  • sti, eller dets aliasser navn, og værdi: hvilken URL metoden er kortlagt til
  • metode: kompatible HTTP-metoder
  • params: filtrerer anmodninger baseret på tilstedeværelse, fravær eller værdi af HTTP-parametre
  • overskrifter: filtrerer anmodninger baseret på tilstedeværelse, fravær eller værdi af HTTP-headere
  • forbruger: hvilke medietyper metoden kan forbruge i HTTP-anmodningsorganet
  • producerer: hvilke medietyper metoden kan producere i HTTP-responsorganet

Her er et hurtigt eksempel på, hvordan det ser ud:

@Controller klasse VehicleController {@RequestMapping (værdi = "/ køretøjer / hjem", metode = RequestMethod.GET) String hjem () {returner "hjem"; }}

Vi kan levere standardindstillinger for alle behandlingsmetoder i a @Kontrol klasse hvis vi anvender denne kommentar på klasseniveau. Den eneste undtagelse er den URL, som Spring ikke tilsidesætter med indstillinger på metodeniveau, men tilføjer de to stigdele.

For eksempel har følgende konfiguration den samme virkning som den ovenfor:

@Controller @RequestMapping (værdi = "/ køretøjer", metode = RequestMethod.GET) klasse VehicleController {@RequestMapping ("/ home") String hjem () {returner "hjem"; }}

I øvrigt, @GetMapping, @PostMapping, @PutMapping, @DeleteMappingog @PatchMapping er forskellige varianter af @RequestMapping med HTTP-metoden allerede indstillet til henholdsvis GET, POST, PUT, DELETE og PATCH.

Disse er tilgængelige siden frigivelse af forår 4.3.

3. @RequestBody

Lad os gå videre til @RequestBody - som kortlægger hoveddel af HTTP-anmodningen til et objekt:

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

Deserialisering er automatisk og afhænger af anmodningens indholdstype.

4. @PathVariable

Lad os derefter tale om @PathVariable.

Denne kommentar indikerer, at a metode argument er bundet til en URI skabelon variabel. Vi kan specificere URI-skabelonen med @RequestMapping kommentar og binde et metodargument til en af ​​skabelondelene med @PathVariable.

Vi kan opnå dette med navn eller dets alias, værdi argument:

@RequestMapping ("/ {id}") Vehicle getVehicle (@PathVariable ("id") lang id) {// ...}

Hvis navnet på delen i skabelonen matcher navnet på metodeargumentet, behøver vi ikke angive det i kommentaren:

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

Desuden kan vi markere en stavariabel valgfri ved at indstille argumentet krævet til falsk:

@RequestMapping ("/ {id}") Vehicle getVehicle (@PathVariable (krævet = falsk) langt id) {// ...}

5. @RequestParam

Vi bruger @RequestParam til adgang til HTTP-anmodningsparametre:

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

Det har de samme konfigurationsindstillinger som @PathVariable kommentar.

Ud over disse indstillinger, med @RequestParam Vi kan specificere en indsprøjtet værdi, når Spring ikke finder nogen eller tom værdi i anmodningen. For at opnå dette er vi nødt til at indstille standard værdi argument.

Tilvejebringelse af en standardværdi indstilles implicit krævet til falsk:

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

Udover parametre er der andre HTTP-anmodningsdele, vi har adgang til: cookies og headere. Vi kan få adgang til dem med kommentarerne @CookieValue og @RequestHeader henholdsvis.

Vi kan konfigurere dem på samme måde som @RequestParam.

6. Svarhåndteringskommentarer

I de næste sektioner vil vi se de mest almindelige kommentarer til manipulation af HTTP-svar i Spring MVC.

6.1. @ResponseBody

Hvis vi markerer en anmodningshåndteringsmetode med @ResponseBody,Foråret behandler resultatet af metoden som selve svaret:

@ResponseBody @RequestMapping ("/ hej") String hej () {returner "Hej verden!"; }

Hvis vi kommenterer a @Kontrol klasse med denne kommentar, vil alle anmodningshåndteringsmetoder bruge den.

6.2. @ExceptionHandler

Med denne kommentar kan vi erklære en brugerdefineret fejlhåndteringsmetode. Spring kalder denne metode, når en anmodningshåndteringsmetode kaster en af ​​de specificerede undtagelser.

Den fangede undtagelse kan overføres til metoden som et argument:

@ExceptionHandler (IllegalArgumentException.class) ugyldig påIllegalArgumentException (IllegalArgumentException undtagelse) {// ...}

6.3. @ResponseStatus

Vi kan specificere den ønskede HTTP-status for svaret hvis vi kommenterer en anmodningshåndteringsmetode med denne kommentar. Vi kan erklære statuskoden med kode argument eller dets alias, værdi argument.

Vi kan også give en grund til at bruge grund argument.

Vi kan også bruge det sammen med @ExceptionHandler:

@ExceptionHandler (IllegalArgumentException.class) @ResponseStatus (HttpStatus.BAD_REQUEST) ugyldig påIllegalArgumentException (IllegalArgumentException undtagelse) {// ...}

For mere information om HTTP-svarstatus, se denne artikel.

7. Andre webkommentarer

Nogle annoteringer administrerer ikke HTTP-anmodninger eller svar direkte. I de næste sektioner introducerer vi de mest almindelige.

7.1. @Kontrol

Vi kan definere en Spring MVC-controller med @Kontrol. For mere information, besøg vores artikel om Spring Bean Annotations.

7.2. @RestController

Det @RestControllermejetærskere @Kontrol og @ResponseBody.

Derfor er følgende erklæringer ækvivalente:

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

7.3. @ModelAttribute

Med denne kommentar kan vi adgangselementer, der allerede er i modellen af en MVC @Kontrol, ved at give modelnøglen:

@PostMapping ("/ assemble") ugyldig assembleVehicle (@ModelAttribute ("køretøj") Vehicle vehicleInModel) {// ...}

Som med @PathVariable og @RequestParam, vi behøver ikke at specificere modelnøglen, hvis argumentet har samme navn:

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

Udover, @ModelAttribute har en anden anvendelse: hvis vi kommenterer en metode med det, vil Spring automatisk tilføje metodens returværdi til modellen:

@ModelAttribute ("køretøj") GetVehicle til køretøj () {// ...}

Som før behøver vi ikke angive modelnøglen, Spring bruger metodens navn som standard:

@ModelAttribute Køretøjskøretøj () {// ...}

Før Spring kalder en metode til anmodningshåndtering, påkalder den alt @ModelAttribute kommenterede metoder i klassen.

Flere oplysninger om @ModelAttribute kan findes i denne artikel.

7.4. @CrossOrigin

@CrossOriginmuliggør kommunikation på tværs af domæner for de annoterede anmodninger om behandlingsmetoder:

@CrossOrigin @RequestMapping ("/ hej") String hej () {returner "Hello World!"; }

Hvis vi markerer en klasse med den, gælder den for alle anmodningshåndteringsmetoder i den.

Vi kan finjustere CORS-opførsel med denne annotations argumenter.

For flere detaljer, se denne artikel.

8. Konklusion

I denne artikel så vi, hvordan vi kan håndtere HTTP-anmodninger og svar med Spring MVC.

Som sædvanligt er eksemplerne tilgængelige på GitHub.

Næste » Kommentarer om forårstøvler « Tidligere forårskernebemærkninger

$config[zx-auto] not found$config[zx-overlay] not found