springboot

SpringBootの@RequestMapping、@PostMapping、@GetMapping、@DeleteMapping、@PutMappingの違いをわかりやすく解説します。

投稿日:

あなた
SpringBootを使っていると@RequestMappingとか@PostMappingとか@GetMappingtとかよく見かけるけどいったいこれは何?

 

これからSpringBootで開発するのならここの理解は必須だね!説明するよ
てんし君

 

こんな方におすすめ

  • SpringBoot学習者
  • @RequestMapping@PostMapping@GetMappingの違いや使い方を知りたい方

SpringBotの@〇〇Mappingは看板付きの入り口

 

ここでは初学者向けにイメージを持ってもらうためにざっくりした説明をした後に少し細かい説明もしていきます。

 

まず簡単に言うとSpringBootの@〇〇Mappingとは外部からのアクションに対するプログラムの処理の入り口です。

(厳密に言えばコントローラーより前にも動くものがあるのですが、まずはコントローラーが入り口だと思ってもらえればいいです。)

 

イメージとしては遊園地を思い浮かべるといいと思います。

 

みんな大好きディ○ニーランドにも入り口はありますよね。

そしてテーマパークを構成するアトラクションや売店、コインロッカーなどの施設にも当然入り口はあります。

 

コントローラクラスの@Mappingはどんな場所かを教えてくれる看板付きの入り口です!

 

 

あなた
場所がわかれば迷うことなさそう!
入るまで何かわからない場所って怖いもんねw
てんし君

 

アトラクション=処理

 

実際に@RequestMapping、@GetMapping、@PostMapping、@DeleteMapping、@PutMappingを使用しているコントローラクラスのコードを見てみましょう。

 

ここでは記述のされ方と使われ方をなんとなく理解できればいいです。

 

コントローラクラス

/**

* コントローラクラスであることの宣言

*/

@RestController

/**

* リクエストURLに対しての処理メソッド定義

*/

@RequestMapping("/messages")

public class MessageController {

/**

* 他クラス呼び出し

*/

@Autowired

private MessageService messageService;

/**

* RequestmappingのGet拡張(全件取得)

*/

@GetMapping

public Collection<Message> getMessages() {

return messageService.getMessages();

}

/**

* RequestmappingのGet拡張(idごとの取得)

*

* @throws NotFoundException

*/

@GetMapping("/{id}")

public Optional<Message> getMessageById(@PathVariable String id) throws NotFoundException {

return messageService.getMessageById(id);

}

/**

* RequestmappingのPost拡張(登録)

*/

@PostMapping

public Message postMessage(@RequestBody @Validated Message message) {

return messageService.createMessage(message);

}

/**

* RequestmappingのDelete拡張(idごとの削除)

*

* @throws NotFoundException

*/

@DeleteMapping("/{id}")

public Optional<Message> deleteMessageById(@PathVariable String id) throws NotFoundException {

return messageService.deleteMessageById(id);

}

/**

* RequestmappingのPut拡張(idごとの更新)

*

* @throws NotFoundException

*/

@PutMapping("/{id}")

public Optional<Message> updateMessageById(@PathVariable String id,

@RequestBody MessageUpdatePayload messageUpdatePayload) throws NotFoundException {

return messageService.updateMessageById(id, messageUpdatePayload);

}

}

 

次からはそれぞれの@〇〇Mappingの意味や使い方を説明していきます。

 

SpringBootの@RequestMappingの役割

@RequestMappingは全体の処理の入り口です。

テーマパークのメインゲートです。

ここを通ることでいろんな処理の場所にいくことができます。

ちなみに@RequestMapping("/messages")と書かれている("/messages")はURLを指定しています。

このアプリケーションの処理が行われるときは必ずhttp://ドメイン/messsages/******となることを示しています。

 

〇〇Mapping のあとの("")部分はそのURLにリクエストあったときにそれぞれの処理が行われると言うことは頭に入れておきましょう。

 

まとめ

@RequestMappingは全体の処理(テーマパーク)の入り口

 

SpringBootの@GetMappingの役割

@RequestMappingは全体の入り口でした。

@GetMappingはGETの処理を行うプログラムの入り口です。

GETというのは文字通り「取得」の役割をはたす部分です。

登録されているデータを取って来たりします。

 

まとめ

@GetMappingは取得の処理(アトラクション)を示している入り口

 

@GetMapping←入り口

↓実際の処理(アトラクション)↓

public Collection<Message> getMessages() {

return messageService.getMessages();

}

 

あなた
@GetMappingって書くだけでいいなんて便利だなぁ
Eclipseを使ってるんだったらF3をおすと@GetMappingの本質的な部分が見れるよ!
てんし君

 

F3を押したときに表示されるクラスの中身です。

@RequestMappingがGETのメソッド(実際の処理)を指定しているのが分かりますね。

本来はこのように記述しなければならないものをSpringBootというフレームワークが@GetMappingと書くだけでいいよー!といってくれているのです。

 

SpringBootありがとう!!

同様にして見ていきましょう。

 

SpringBootの@PostMappingの役割

 

@PostMappingはPOSTの処理を行うプログラムの入り口です。

GETというのは文字通り「投稿」の役割をはたす部分です。

新しいデータを登録したりします。

 

まとめ

@GetMappingは投稿の処理(アトラクション)を示している入り口

 

SpringBootの@DeleteMappingの役割

 

ここまで来たらなんとなくわかって来ましたよね。

@DeleteMappingはDELETEの処理を行うプログラムの入り口です。

DELETEというのは文字通り「削除」の役割をはたす部分です。

既存のデータを削除します。

 

まとめ

@DeleteMappingは既存データの削除処理(アトラクション)を示している入り口

 

SpringBootの@PutMappingの役割

@PutMappingはPutの処理を行うプログラムの入り口です。

PUTというのは少しイメージがつきづらいですが「更新」の役割をはたす部分です。

既存のデータや情報を上書きします。

 

まとめ

@PutMappingはアップデートの処理(アトラクション)を示している入り口

 

SpringBootならCRUDが簡単に実装できる

 

余談になりますがこの@Mappingの役割はプログラムを作っていく上で非常にありがたい仕組みです。

基本操作であるCreate,Read,Update,Deleteが実装しやすいからです。

SpringBootをを使う方はフレームワークに感謝しながら、同時に裏側ではどんな処理が行われているかを意識しながら開発すると力になりやすいですよ!

 

是非楽しんでください★

 

-springboot

Copyright© エンジニアてんし君ブログ , 2020 All Rights Reserved.