こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、10年目エンジニアです。
この記事では、 SpringBootでURLとクラスやメソッドをマッピングできる@RequestMappingアノテーションについて
- @RequestMappingアノテーションとは
- @RequestMappingアノテーションを使ったサンプルプログラム
と、丁寧に解説していきます。
前提:実施している環境
この記事では、以下の環境で行っています。
OS | Windows10 |
---|---|
IntelliJ IDEAのエディション | Community(無料版) |
IntelliJ IDEAのバージョン | 2021.3.2 |
プロジェクト | Gradle Project |
言語 | Java バージョン11 |
フレームワーク | Spring Boot バージョン2.6.3 |
Spring Bootを動かすためにIntelliJ IDEAを使っています。
IntelliJ IDEAのインストールとSpring Bootプロジェクトを新規作成するやり方はこちらの記事をご参考ください。
【IntelliJ IDEA】インストールするやり方を解説します(Windows向け)
Spring Bootプロジェクトを新規作成するやり方
【IntelliJ IDEA】Spring Initializrを使ってSpring Bootプロジェクトを新規作成するやり方を解説します
この記事では
C:\SpringBootSample
配下に「SpringSample」という名前のプロジェクトを作っています。
@RequestMappingアノテーションとは
@RequestMappingアノテーションとは、URLとコントローラーのクラスまたはメソッドを紐づけることができるアノテーションです。
@RequestMappingアノテーションを使うためには
1 |
import org.springframework.web.bind.annotation.RequestMapping; |
をインポートする必要があります。
@RequestMappingアノテーションの使い方サンプルは以下になります。
1 2 3 4 |
@RequestMapping(value = "/sample", method = RequestMethod.GET) String sample(){ // 処理 } |
指定できる属性の
- value属性
- method属性
について、それぞれ詳しく解説します。
@RequestMappingアノテーションの属性:value属性
@RequestMappingアノテーションの属性のvalue属性は、メソッドやクラスに紐づけるURLのパスを指定する属性です。
1 2 3 4 |
@RequestMapping(value = "/sample") String sample(){ // 処理 } |
だと【http://localhost:8080/sample】というURLとsampleメソッドを紐づける、という意味です。
最初の「/」は省略してもOKです。
もしURLのパスのみを指定する場合は
1 2 3 4 |
@RequestMapping("/sample") String sample(){ // 処理 } |
と、属性名の「value」を省略してもOKです。
また、value属性には複数のURLのパスを指定することもできます。
書き方は
1 2 3 4 |
@RequestMapping({"/test", "/sample"}) String sample(){ // 処理 } |
です。
この場合
- http://localhost:8080/sample
- http://localhost:8080/test
のURLのパスとsampleメソッドを紐づけています。
@RequestMappingアノテーションの属性:method属性
@RequestMappingアノテーションの属性のmethod属性は、GET、POSTといったHTTPリクエストを指定する属性です。
先ほどの
1 2 3 4 |
@RequestMapping(value = "/sample", method = RequestMethod.GET) String sample(){ // 処理 } |
だと【http://localhost:8080/sample】のURL、かつGETリクエストだとsampleメソッドに紐づける、という意味です。
method属性に指定できるものは以下になります。
POSTを指定 | RequestMethod.POST |
---|---|
GETを指定 | RequestMethod.GET |
これらを指定するためには
1 |
import org.springframework.web.bind.annotation.RequestMethod; |
をインポートする必要があります。
なお、method属性はクラスに@RequestMappingアノテーションつける場合は、指定しません。
では、次の章で実際に使ってみます。
@RequestMappingアノテーションを解説するプログラムの概要
@RequestMappingアノテーションを解説するプログラムでは、
value属性にURLのパスを2つ、method属性でGETを指定したメソッドを1つ作成します。
- value属性に指定したURLのパス2つともでアクセスできること
- method属性に指定しなかったPOSTでアクセスできないこと
を確認します。
解説で使うJavaプログラムは、
SpringSample\src\main\java\com\example\SpringSample
配下にある【SpringSampleApplication.java】を使います。
Javaサンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
package com.example.SpringSample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class SpringSampleApplication { public static void main(String[] args) { SpringApplication.run(SpringSampleApplication.class, args); } @RequestMapping(value = {"/hello", "/world"}, method = RequestMethod.GET) String index(){ return "Hello World!"; } } |
実行結果
プロジェクトを実行するやり方は
- プログラムを右クリックして実行
- 実行タブから実行
- ガターから実行
の3種類あるので、いずれかで実行します。
詳しい解説は以下の記事をご参考ください。
今回、確認するにあたりPostmanというツールを使います。
Postmanの基本的な使い方については、こちらの記事をご参考ください。
まず、「value属性に指定したURLのパス2つともでアクセスできること」を確認します。
【http://localhost:8080/hello】のURL、かつGETでリクエストを投げると、HTTPステータスが正常の200、
Hello World!
が返されているので、アクセスできていることが確認できました。
【http://localhost:8080/world】のURL、かつGETでリクエストを投げると、こちらもHTTPステータスが200で
Hello World!
と同じレスポンスが返ってきているので、アクセスできていることが確認できました。
指定したものとは異なる【http://localhost:8080/aaa】のURL、かつGETでリクエストを投げると、HTTPステータスが404で
1 2 3 4 5 6 |
{ "timestamp": "2022-03-01T14:26:11.775+00:00", "status": 404, "error": "Not Found", "path": "/aaa" } |
と、このURLは存在しないとエラーが返ってきているので、アノテーションで指定していないURLにはアクセスできていないことが確認できました。
2つ目の「method属性に指定しなかったPOSTでアクセスできないこと」を確認します。
【http://localhost:8080/hello】のURL、かつPOSTでリクエストを投げると、HTTPステータスが405で、
1 2 3 4 5 6 |
{ "timestamp": "2022-03-01T14:33:22.631+00:00", "status": 405, "error": "Method Not Allowed", "path": "/hello" } |
と、このURLではPOSTは受け付けないとエラーが返ってきているので、アノテーションで指定していないPOSTではアクセスできていないことが確認できました。
まとめ:@RequestMappingアノテーションを使ってみよう!
以上がSpringBootのURLとクラスやメソッドをマッピングする@RequestMappingアノテーションについての解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント