1. 概要

春4.3。 は、典型的なSpringMVCプロジェクトでの@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. 使い方

上記のすべてのアノテーションは、すでに@RequestMappingmethod要素のそれぞれの値で内部的にアノテーションが付けられています。

たとえば、 @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、などの注釈が付けられます。

注釈の完全なソースコードは、こちらで入手できます。

4. 実装

これらのアノテーションを使用して、簡単なRESTアプリケーションを作成してみましょう。

Mavenを使用してプロジェクトをビルドし、Spring MVCを使用してアプリケーションを作成するため、 pom.xml:に必要な依存関係を追加する必要があることに注意してください。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

spring-webmvc の最新バージョンは、 CentralMavenリポジトリで入手できます。

次に、着信要求URLをマップするコントローラーを作成する必要があります。 このコントローラー内では、これらすべてのアノテーションを1つずつ使用します。

4.1. @GetMapping

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

4.2. @PostMapping

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

4.3. @PutMapping

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

4.4. @DeleteMapping

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

4.5. @PatchMapping

@PatchMapping("/patch")
public @ResponseBody ResponseEntity<String> patch() {
    return new ResponseEntity<String>("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」にアクセスすると、定数文字列「GETResponse」が期待されます。

それでは、@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. 結論

この記事では、従来のSpringMVCフレームワークを使用した迅速なWeb開発のためのさまざまなタイプの@RequestMappingショートカットについて簡単に紹介しました。 これらのクイックショートカットを利用して、クリーンなコードベースを作成できます。

いつものように、このチュートリアルのソースコードはGithubプロジェクトにあります。