SpringでRESTful Web Serviceを構築

投稿者: | 2020年2月7日

Springの公式サイト、Getting Started での記述に倣って、RESTful Web Serviceを構築してみます。

https://spring.io/guides/gs/rest-service/

 

ブラウザでhttp://localhost:8080/greeting にアクセスすると、”id”と”content”がJSON形式で表示されます。

 

URLにパラメータを入れることで、”content”表記を変えることもできます。この例ではパラメータ”name”として”Space”という文字列を入力し、出力結果に反映させています。

 

パッケージのダウンロード

Spring Initializrというサイトを使うのが便利です。ここに必要事項を入力するだけで、依存関係も含めた、必要なモノ一式をパッケージ形式で作成してくれます。

今回のケースでは特に変更するフィールドはありません。初期画面のまま、”Generate”ボタンを押してダウンロードします。

 

“demo.zip”というzipファイルがダウンロードされますので、解凍し適当な場所へ配置します。今回はCドライブ直下。

 

この中で設定ファイルを編集したり、必要なクラスを追加したりしていきます。

 

pom.xmlの編集

まずはpom.xmlの編集をします。GradleでもBuild可能ですが、今回はMavenを使用します。

情報の授受にJSONを使うので、Jayway JasonPathというライブラリを追加します。

 

フォルダ直下にあるpom.xmlをテキストエディタで開き、

 

公式サイト通り、以下の内容を追記します。

 

リソース・クラスの作成

次にリソース・クラスを作成します。”id”と”content”の値を保持するクラスです。

公式ページに従い、com.example.restservice を java package として、Greeting クラスを作成します。

 

コントローラ・クラスの作成

HTTPリクエストを取り扱う為のコントローラ・クラスを作成します。このクラスは@RestControllerにより識別されます。

公式ページに従い、com.example.restservice を java package として、GreetingController クラスを作成します。

@GetMappingがHTTP GETリクエストを /greeting にマップする働きをします。

(余談ですが、POSTリクエストに対応する@PostMappingも存在します)

また、greetingメソッド中の@RequestParamは、”name”パラメータを使用してcontent中の変数を変更する役割を持ちます。

 

JAVA_HOMEの設定

ここまでできたら実行してみます。コマンドプロンプトを開き、”demo”をカレント・ディレクトリにしてから、次のコマンドを実行。

mvnw spring-boot:run

おおっと。

Error: JAVA_HOME not found in your environment.

が出てしまったので、環境変数JAVA_HOMEを設定します。

設定画面の開き方は色々ありますが、今回はWindows10デフォルトの検索フィールドからページに飛びます。

 

pom.xmlの再編集

サイド実行してみます。

 

コンパイルエラーが発生している・・・。アノテーションからして見つけられていないようです。

パッケージorg.springframework.web.bind.annotationは存在しません

 

実はデフォルトのpom.xmlの記載が正しくなかった模様。

artifactIdは、spring-boot-starter-web が正しいので、そのように修正します。

 

java package見直し

改めて同じコマンドを実行。

 

今度は無事、サービスが立ち上がった様です。

http://localhost:8080/greeting にアクセスしてみると・・・

 

Errorページが出てしまいます。このページ自体はデフォルトのエラー画面なので問題ないのですが、何故かコントローラにアクセスできていないようです。

で、これも調べていくうちに、先に追加したクラスのパッケージに誤りがありました。

 

これまで作成したクラスは、@SpringBootApplicationと同じパッケージか、そのサブパッケージに作成する必要があったのです・・・

 

“com.example.restservice”パッケージを・・・

 

“com.example.demo.restservice”となるように移動。

 

当然、Greeting.java と GreetingController.java に記載の package も、それに合わせて変更します。

 

 

実行結果

改めて同じコマンドを実行。起動後、ブラウザで http://localhost:8080/greeting にアクセスします。

 

今度は無事動きました! “content” パラメータには、デフォルト設定した “Hello, World!” が表示されています。

今度はパラメータを変更してみます。name パラメータで hogehoge を指定してみると・・

http://localhost:8080/greeting?name=hogehoge

“content” パラメータが “hogehoge” になっています。また、”id” パラメータがインクリメントされて 2 になっています。