Proljeće @RequestMapping Nove bilješke prečaca

1. Pregled

Proljeće 4.3. uveo je neke vrlo cool napomene sastavljene na razini metode kako bi se ujednačilo rukovanje @RequestMapping u tipičnim proljetnim MVC projektima.

U ovom ćemo članku naučiti kako ih učinkovito koristiti.

2. Nove bilješke

Tipično, ako želimo implementirati rukovatelj URL-om koristeći tradicionalni @RequestMapping napomena, to bi bilo otprilike ovako:

@RequestMapping (value = "/ get / {id}", method = RequestMethod.GET)

Novi pristup omogućuje skraćivanje ovoga jednostavno na:

@GetMapping ("/ get / {id}")

Spring trenutno podržava pet vrsta ugrađenih bilješki za rukovanje različitim vrstama dolaznih metoda HTTP zahtjeva koje su DOBITI, OBJAVITI, STAVITI, BRISATI i ZAKRPA. Ove su bilješke:

  • @GetMapping
  • @PostMapping
  • @PutMapping
  • @DeleteMapping
  • @PatchMapping

Iz konvencije imenovanja možemo vidjeti da je svaka napomena namijenjena obradi odgovarajuće vrste metode dolaznog zahtjeva, tj. @GetMapping koristi se za rukovanje DOBITI vrsta metode zahtjeva, @PostMapping koristi se za rukovanje OBJAVI vrsta metode zahtjeva itd.

3. Kako to djeluje

Sve gore navedene bilješke već su interno označene sa @RequestMapping i odgovarajuća vrijednost u metoda element.

Na primjer, ako ćemo pogledati izvorni kod @GetMapping bilješku, možemo vidjeti da je već označena s RequestMethod.GET na sljedeći način:

@Target ({java.lang.annotation.ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Documented @RequestMapping (method = {RequestMethod.GET}) public @interface GetMapping {// abstraktni kodovi}

Sve ostale bilješke kreiraju se na isti način, tj. @PostMapping je označeno sa RequestMethod.POST, @PutMapping je označeno sa RequestMethod.PUT, itd.

Potpuni izvorni kod bilješki dostupan je ovdje.

4. Provedba

Pokušajmo upotrijebiti ove bilješke za izgradnju brze REST aplikacije.

Imajte na umu da, budući da bismo za izradu projekta koristili Maven, a za izradu naše aplikacije Spring MVC, moramo dodati potrebne ovisnosti u pom.xml:

 org.springframework spring-webmvc 5.2.2.OBUSTAVLJANJE 

Najnovija verzija proljeće-webmvc dostupan je u središnjem spremištu Maven.

Sada moramo stvoriti kontroler za mapiranje URL-a dolaznog zahtjeva. Unutar ovog kontrolera koristili bismo sve ove bilješke jednu po jednu.

4.1. @GetMapping

@GetMapping ("/ get") public @ResponseBody ResponseEntity get () {return new ResponseEntity ("GET Response", HttpStatus.OK); } 
@GetMapping ("/ get / {id}") public @ResponseBody ResponseEntity getById (@PathVariable String id) {return new ResponseEntity ("GET Response:" + id, HttpStatus.OK); }

4.2. @PostMapping

@PostMapping ("/ post") public @ResponseBody ResponseEntity post () {return new ResponseEntity ("POST Response", HttpStatus.OK); }

4.3. @PutMapping

@PutMapping ("/ put") public @ResponseBody ResponseEntity put () {return new ResponseEntity ("PUT Response", HttpStatus.OK); }

4.4. @DeleteMapping

@DeleteMapping ("/ delete") public @ResponseBody ResponseEntity delete () {return new ResponseEntity ("DELETE Response", HttpStatus.OK); }

4.5. @PatchMapping

@PatchMapping ("/ patch") public @ResponseBody ResponseEntity patch () {return new ResponseEntity ("PATCH Response", HttpStatus.OK); }

Bilješke:

  • Upotrijebili smo potrebne bilješke za rukovanje ispravnim dolaznim HTTP metodama s URI-jem. Na primjer, @GetMapping za obradu URI-ja “/ get”, @PostMapping za obradu URI-ja "/ post" i tako dalje

  • Budući da izrađujemo aplikaciju temeljenu na REST-u, vraćamo konstantni niz (jedinstven za svaku vrstu zahtjeva) s kodom od 200 za pojednostavljivanje aplikacije. Koristili smo Spring's @ResponseBody bilješka u ovom slučaju.
  • Ako bismo morali obraditi bilo koju varijablu puta URL-a, to jednostavno možemo učiniti na mnogo manje način kao nekada u slučaju korištenja @RequestMapping.

5. Testiranje aplikacije

Da bismo testirali aplikaciju, moramo stvoriti nekoliko test slučajeva pomoću JUnit-a. Koristili bismo SpringJUnit4ClassRunner za pokretanje probne nastave. Stvorili bismo pet različitih testnih slučajeva kako bismo testirali svaku napomenu i svaki obrađivač koji smo deklarirali u kontroleru.

Pojednostavnimo primjer testnog slučaja @GetMapping:

@Test public void giventUrl_whenGetRequest_thenFindGetResponse () baca iznimku {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders .get ("/ get"); ResultMatcher contentMatcher = MockMvcResultMatchers.content () .string ("GET Response"); this.mockMvc.perform (graditelj) .andExpect (contentMatcher) .andExpect (MockMvcResultMatchers.status (). isOk ()); }

Kao što vidimo, očekujemo stalni niz "DOBITE odgovor“, Jednom kad pogodimo DOBITI URL “/ get”.

Ajmo sada stvoriti test slučaj za testiranje @PostMapping:

@Test public void givenUrl_whenPostRequest_thenFindPostResponse () baca izuzetak {MockHttpServletRequestBuilder builder = MockMvcRequestBuilders .post ("/ post"); ResultMatcher contentMatcher = MockMvcResultMatchers.content () .string ("POST odgovor"); this.mockMvc.perform (graditelj) .andExpect (contentMatcher) .andExpect (MockMvcResultMatchers.status (). isOk ()); }

Na isti način stvorili smo i ostatak testnih slučajeva kako bismo testirali sve HTTP metode.

Alternativno, uvijek možemo koristiti bilo koji uobičajeni REST klijent, na primjer, PostMan, RESTClient itd., Za testiranje naše aplikacije. U tom slučaju, moramo biti malo oprezni pri odabiru ispravne vrste HTTP metode dok koristimo ostalog klijenta. U suprotnom, ispao bi status pogreške 405.

6. Zaključak

U ovom smo članku kratko upoznali različite vrste @RequestMapping prečaci za brzi web razvoj pomoću tradicionalnog Spring MVC okvira. Ove brze prečace možemo koristiti za stvaranje čiste baze koda.

Kao i uvijek, izvorni kod za ovaj vodič možete pronaći u projektu Github.