Spring @RequestMapping Anotasi Pintasan Baru

1. Gambaran keseluruhan

Musim bunga 4.3. memperkenalkan beberapa anotasi peringkat kaedah yang sangat keren untuk melancarkan pengendalian @RequestMapping dalam projek Spring MVC khas.

Dalam artikel ini, kita akan belajar bagaimana menggunakannya dengan cara yang cekap.

2. Anotasi Baru

Biasanya, jika kita mahu menerapkan pengendali URL menggunakan anotasi @RequestMapping tradisional , ia seperti ini:

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

Pendekatan baru memungkinkan untuk memendekkan ini hanya untuk:

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

Spring kini menyokong lima jenis anotasi terbina dalam untuk menangani pelbagai jenis kaedah permintaan HTTP yang masuk iaitu GET, POST, PUT, DELETE dan PATCH . Anotasi ini adalah:

  • @GetMapping
  • @Peta Pemetaan
  • @PutMapping
  • @HapusPemetaan
  • @PatchMapping

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

3. Bagaimana Ia Berfungsi

Semua anotasi di atas telah dianotasi secara dalaman dengan @RequestMapping dan nilai masing-masing dalam elemen kaedah .

Sebagai contoh, jika kita melihat kod sumber anotasi @GetMapping , kita dapat melihat bahawa ia sudah diberi anotasi 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 lain dibuat dengan cara yang sama, iaitu @PostMapping dianotasi dengan RequestMethod.POST , @PutMapping dianotasi dengan RequestMethod.PUT, dll.

Kod sumber lengkap anotasi terdapat di sini.

4. Pelaksanaan

Mari cuba gunakan anotasi ini untuk membina aplikasi REST cepat.

Harap maklum bahawa kerana kami akan menggunakan Maven untuk membina projek dan Spring MVC untuk membuat aplikasi kami, kami perlu menambahkan pergantungan yang diperlukan dalam pom.xml:

 org.springframework spring-webmvc 5.2.2.RELEASE 

Versi terkini spring-webmvc boleh didapati di Central Maven Repository.

Sekarang, kita perlu membuat pengawal untuk memetakan URL permintaan masuk. Di dalam alat kawalan ini, kami akan menggunakan semua anotasi ini satu persatu.

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. @Peta Pemetaan

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

@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); }

Perkara yang perlu diperhatikan:

  • Kami telah menggunakan anotasi yang diperlukan untuk menangani kaedah HTTP masuk yang betul dengan URI . Contohnya, @GetMapping untuk menangani URI “/ get”, @PostMapping untuk mengendalikan URI “/ post” dan sebagainya

  • Oleh kerana kami membuat aplikasi berdasarkan REST, kami mengembalikan rentetan tetap (unik untuk setiap jenis permintaan) dengan 200 kod respons untuk mempermudah aplikasi. Kami telah menggunakan anotasi Spring @ResponseBody dalam kes ini.
  • Sekiranya kita harus menangani sebarang pemboleh ubah jalur URL, kita boleh melakukannya dengan cara yang jauh lebih sedikit daripada yang biasa kita lakukan sekiranya menggunakan @RequestMapping.

5. Menguji Aplikasi

Untuk menguji aplikasi, kita perlu membuat beberapa kes ujian menggunakan JUnit. Kami akan menggunakan SpringJUnit4ClassRunner untuk memulakan kelas ujian. Kami akan membuat lima kes ujian yang berbeza untuk menguji setiap anotasi dan setiap pengendali yang kami nyatakan dalam pengawal.

Mari ringkas contoh contoh ujian @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

Dalam artikel ini, kami telah memperkenalkan pengenalan cepat mengenai pelbagai jenis pintasan @RequestMapping untuk pengembangan web cepat menggunakan rangka kerja Spring MVC tradisional. Kita boleh menggunakan jalan pintas cepat ini untuk membuat asas kod yang bersih.

Seperti biasa, anda boleh mendapatkan kod sumber untuk tutorial ini dalam projek Github.