Spring @RequestMapping新しいショートカットアノテーション
1. 概要
春4.3。 introducedは、典型的なSpring MVCプロジェクトでの@RequestMappingの処理をスムーズにするための、非常に優れたメソッドレベルの合成アノテーションです。
この記事では、それらを効率的な方法で使用する方法を学びます。
2. 新しい注釈
通常、従来の@RequestMappingアノテーションを使用してURLハンドラーを実装する場合は、次のようになります。
@RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
新しいアプローチにより、これを単に次のように短縮できます。
@GetMapping("/get/{id}")
Springは現在、GET, POST, PUT, DELETEとPATCHであるさまざまなタイプの着信HTTPリクエストメソッドを処理するための5種類の組み込みアノテーションをサポートしています。 これらの注釈は次のとおりです。
-
@GetMapping
-
@PostMapping
-
@PutMapping
-
@DeleteMapping
-
@PatchMapping
命名規則から、各アノテーションはそれぞれの着信リクエストメソッドタイプを処理するためのものであることがわかります。 @GetMappingはGETタイプのリクエストメソッドを処理するために使用され、@PostMappingはPOSTタイプのリクエストメソッドを処理するために使用されます。
3. 使い方
上記のすべての注釈は、すでに内部で@RequestMappingとmethod要素のそれぞれの値で注釈が付けられています。
たとえば、@GetMappingアノテーションのソースコードを見ると、次のようにすでにRequestMethod.GETアノテーションが付けられていることがわかります。
@Target({ java.lang.annotation.ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@RequestMapping(method = { RequestMethod.GET })
public @interface GetMapping {
// abstract codes
}
他のすべての注釈は同じ方法で作成されます。 @PostMappingにはRequestMethod.POSTの注釈が付けられ、@PutMappingにはRequestMethod.PUT,の注釈が付けられます。
注釈の完全なソースコードはhereで入手できます。
4. 実装
これらのアノテーションを使用して、簡単なRESTアプリケーションを作成してみましょう。
Mavenを使用してプロジェクトをビルドし、Spring MVCを使用してアプリケーションを作成するため、pom.xml:に必要な依存関係を追加する必要があることに注意してください。
org.springframework
spring-webmvc
4.3.6.RELEASE
spring-webmvcの最新バージョンは、Central Maven Repositoryで入手できます。
ここで、着信要求URLをマップするコントローラーを作成する必要があります。 このコントローラー内では、これらのアノテーションをすべて1つずつ使用します。
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);
}
注意すべき点:
-
URI.を使用して適切な着信HTTPメソッドを処理するために必要なアノテーションを使用しました。たとえば、@GetMappingは「/ get」URIを処理し、@PostMappingは「/ post」URIを処理します。 __
-
RESTベースのアプリケーションを作成しているため、アプリケーションを簡素化するために、200個の応答コードを含む定数文字列(各要求タイプに固有)を返しています。 この場合、Springの@ResponseBodyアノテーションを使用しました。
-
URLパス変数を処理する必要がある場合は、@RequestMapping.を使用する場合に、以前よりもはるかに少ない方法で処理できます。
5. アプリケーションのテスト
アプリケーションをテストするには、JUnitを使用していくつかのテストケースを作成する必要があります。 SpringJUnit4ClassRunnerを使用してテストクラスを開始します。 コントローラで宣言した各アノテーションとすべてのハンドラをテストするために、5つの異なるテストケースを作成します。
@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());
}
ご覧のとおり、GETのURL「/ get」にアクセスすると、定数文字列「GET Response」が期待されます。
それでは、@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());
}
同様に、残りのテストケースを作成して、すべてのHTTPメソッドをテストしました。
あるいは、PostMan、RESTClientなどの一般的なRESTクライアントを使用して、アプリケーションをテストすることもできます。 その場合、残りのクライアントを使用している間、正しいHTTPメソッドタイプを選択するように少し注意する必要があります。 そうでない場合、405エラーステータスがスローされます。
6. 結論
この記事では、従来のSpring MVCフレームワークを使用した迅速なWeb開発のためのさまざまなタイプの@RequestMappingショートカットについて簡単に紹介しました。 We can utilize these quick shortcuts to create a clean code base.
いつものように、このチュートリアルのソースコードはGithub projectにあります。