1概要

春4.3。

導入

典型的なSpring MVCプロジェクトでの@ RequestMappingの処理を円滑にするための、非常にクールなメソッドレベルの合成アノテーション

この記事では、それらを効率的に使用する方法を学びます。

** 2新しい注釈

**

通常、従来の

@ RequestMapping

アノテーションを使用してURLハンドラを実装したい場合は、次のようになります。

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

新しいアプローチにより、これを単純に短縮することが可能になります。

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

Springは現在、

GET、POST、PUT、DELETE

、および

PATCH

の5種類の組み込みHTTP要求メソッドを処理するための組み込み注釈をサポートしています。これらの注釈は次のとおりです。


  • @ GetMapping


  • @ PostMapping


  • @ PutMapping


  • @ DeleteMapping


  • @ PatchMapping

命名規則から、各アノテーションはそれぞれの入ってくるリクエストメソッドタイプを処理することを意図していることがわかります。つまり、

@ GetMapping



GET

タイプのリクエストメソッドを処理するために使用されます

** 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のアノテーションが付けられ、など

注釈の完全なソースコードはhttps://github.com/spring-projects/spring-framework/tree/master/spring-web/src/main/java/org/springframework/web/bind/annotation[here]。

** 4実装+

**

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

プロジェクトの構築にはMavenを使用し、アプリケーションの作成にはSpring MVCを使用するので、__pom.xmlに必要な依存関係を追加する必要があります。

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


spring-webmvc

の最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.springframework%22%20AND%20a%3A%22spring-webmvc%にあります。 22[セントラルメーブンリポジトリ]。

それでは、着信リクエスト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);
}

  • 注意すべき点:**

  • 適切なHTTPを処理するために必要なアノテーションを使用しました

URIが

__.


のメソッドたとえば、「/get」URIを処理する

@ GetMapping


@ PostMapping__は「/post」URIなどを処理します。

  • RESTベースのアプリケーションを作成しているので、

アプリケーションを単純化するための200の応答コードを含む定数文字列(各要求タイプに固有)。この場合は、Springの

@ ResponseBody

アノテーションを使用しました。

  • URLパス変数を処理する必要がある場合は、単純に多くのことを実行できます

[email protected]を使用する場合に使用する方法が少なくなりました。

=== ** 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

ショートカットについて簡単に紹介しました。 ** これらのクイックショートカットを利用して、きれいなコードベースを作成することができます。

いつも通り、このチュートリアルのソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-mvc-java[Githubプロジェクト]にあります。