Spring @Requestapping Anotasi Pintasan Baru

1. Ikhtisar

Musim semi 4.3. memperkenalkan beberapa anotasi tersusun tingkat metode yang sangat keren untuk memperlancar penanganan @RequestMapping dalam proyek MVC Spring yang khas.

Pada artikel ini, kita akan mempelajari cara menggunakannya dengan cara yang efisien.

2. Anotasi Baru

Biasanya, jika kita ingin mengimplementasikan penangan URL menggunakan anotasi @RequestMapping tradisional , itu akan menjadi seperti ini:

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

Pendekatan baru memungkinkan untuk mempersingkat ini menjadi:

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

Spring saat ini mendukung lima jenis anotasi bawaan untuk menangani berbagai jenis metode permintaan HTTP yang masuk yaitu GET, POST, PUT, DELETE, dan PATCH . Anotasi ini adalah:

  • @Tokopedia
  • @Postingan
  • @Putih
  • @Hapus
  • @Catatan

Dari konvensi penamaan kita dapat melihat bahwa setiap anotasi dimaksudkan untuk menangani masing-masing jenis metode permintaan yang masuk, yaitu @GetMapping digunakan untuk menangani jenis GET metode permintaan, @PostMapping digunakan untuk menangani jenis metode permintaan POST , dll.

3. Bagaimana Ini Bekerja

Semua anotasi di atas sudah dianotasi secara internal dengan @RequestMapping dan nilainya masing-masing di elemen metode .

Misalnya, jika kita akan melihat kode sumber anotasi @GetMapping , kita dapat melihat bahwa itu sudah dianotasi dengan RequestMethod.GET dengan cara berikut:

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

Semua anotasi lainnya dibuat dengan cara yang sama, misalnya @PostMapping dianotasi dengan RequestMethod.POST , @PutMapping dianotasi dengan RequestMethod.PUT, dll.

Kode sumber lengkap dari anotasi tersedia di sini.

4. Implementasi

Mari mencoba menggunakan anotasi ini untuk membuat aplikasi REST cepat.

Harap dicatat bahwa karena kami akan menggunakan Maven untuk membangun proyek dan Spring MVC untuk membuat aplikasi kami, kami perlu menambahkan dependensi yang diperlukan di pom.xml:

 org.springframework spring-webmvc 5.2.2.RELEASE 

Versi terbaru spring-webmvc tersedia di Central Maven Repository.

Sekarang, kita perlu membuat pengontrol untuk memetakan URL permintaan yang masuk. Di dalam pengontrol ini, kami akan menggunakan semua anotasi ini satu per satu.

4.1. @Tokopedia

@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. @Postingan

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

4.3. @Putih

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

4.4. @Hapus

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

4.5. @Catatan

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

Poin yang perlu diperhatikan:

  • Kami telah menggunakan anotasi yang diperlukan untuk menangani metode HTTP masuk yang tepat dengan URI . Misalnya, @GetMapping untuk menangani URI “/ get”, @PostMapping untuk menangani URI “/ post”, dan sebagainya

  • Karena kami membuat aplikasi berbasis REST, kami mengembalikan string konstan (unik untuk setiap jenis permintaan) dengan 200 kode respons untuk menyederhanakan aplikasi. Kami telah menggunakan anotasi @ResponseBody Spring dalam kasus ini.
  • Jika kami harus menangani variabel jalur URL apa pun, kami dapat melakukannya dengan cara yang jauh lebih sedikit yang biasa kami lakukan jika menggunakan @RequestMapping.

5. Menguji Aplikasi

Untuk menguji aplikasi kita perlu membuat beberapa kasus uji menggunakan JUnit. Kami akan menggunakan SpringJUnit4ClassRunner untuk memulai kelas pengujian. Kami akan membuat lima kasus uji berbeda untuk menguji setiap anotasi dan setiap penangan yang kami deklarasikan di pengontrol.

Mari sederhanakan contoh kasus uji @GetMapping:

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

As we can see, we are expecting a constant string “GET Response“, once we hit the GET URL “/get”.

Now, let's create the test case to test @PostMapping:

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

In the same way, we created the rest of the test cases to test all of the HTTP methods.

Alternatively, we can always use any common REST client, for example, PostMan, RESTClient etc, to test our application. In that case, we need to be a little careful to choose correct HTTP method type while using the rest client. Otherwise, it would throw 405 error status.

6. Conclusion

Pada artikel ini, kami memiliki pengenalan singkat tentang berbagai jenis pintasan @RequestMapping untuk pengembangan web cepat menggunakan kerangka MVC Spring tradisional. Kita dapat memanfaatkan pintasan cepat ini untuk membuat basis kode yang bersih.

Seperti biasa, Anda dapat menemukan kode sumber untuk tutorial ini di proyek Github.