Springには、RESTful Web Serviceを極めて簡単に実装する仕組みがあります。
HTTP GETリクエストを受けると、パラメータをJSON形式で返却するサービスの構築について説明します。
環境は、Windows 10 Home です。
目次
やりたいこと
httpリクエストを送ると(ブラウザでURLにアドレスを入れると)、パラメータをJSON形式で表示します。
httpリクエストを送ると

パラメータを表示します。

環境構築
パッケージのダウンロード
今回はIDEを使用せず、スクラッチで構築してみます。
必要なライブラリが揃った状態とするため、Spring Initializr からパッケージをダウンロードします。
Dependencies に “Spring Web” を追加して、”GENERATE” ボタンを押します。

“demo” という名称のzipファイルができるので、それを適当な場所に解凍し配置します。
ここでは C:\demo としました。

クラスファイルの作成
Resourceクラスの作成
JSONを表現するResourceクラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.example.demo; public class PersonInfo { private final String name; public PersonInfo(String name) { this.name = name; } public String getName() { return name; } } |
フィールドは、”name” のみのシンプルなクラスです。
Controllerクラスの作成
次にControllerクラスを作成します。
リクエスト・パラメータに渡すことで、name は変更可能となっています。
パラメータが何も渡されなければ、デフォルトで “Taro” を格納します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class PersonInfoController { private static final String template = "%s"; @GetMapping("/personinfo") public PersonInfo personinfo(@RequestParam(value = "name", defaultValue = "Taro") String name) { return new PersonInfo(String.format(template, name)); } } |
クラスファイルの配置
作成した2つのクラスファイルを、”demo”パッケージ下に配置します。

留意点 – java versionの確認
ここまで来たら実行するだけですが、留意点として、java version の確認が挙げられます。
パッケージ内のpom.xmlと、実行環境のjavaバージョンが合っていないと、起動時に失敗しますので、もし違っていたら合わせておきましょう。
実行環境のjava version
1 2 3 4 |
c:\demo>java -version java version "1.8.0_241" Java(TM) SE Runtime Environment (build 1.8.0_241-b07) Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode) |
pom.xmlのjava version
1 2 3 |
<properties> <java.version>1.8</java.version> </properties> |
両者のバージョンが合っていないと、起動時に”無効なターゲット・リリース”であるというエラーが発生します。
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project demo: Fatal error compiling: 11は無効なターゲット・リリースです -> [Help 1]
動作確認
コマンドプロンプトでカレント・ディレクトリをdemoフォルダの場所に合わせ、mvnw spring-boot:run コマンドを実行します。
1 |
c:\demo>mvnw spring-boot:run |
Springが起動したら、URLからリクエストしてみます。

おまけ – ネストしたJSONデータを作る
上記の例では、フラットなJSONデータを生成していましたが、ネストしたJSONデータを作りたい場合もあります。
JSONデータはJavaのResourceクラスに対応していますので、Javaのクラスも同様の構成にすればOKです。
例として、先ほどのケースに”Address”という項目を追加し、情報の階層構造を作りたいとします。
1 2 3 4 5 6 7 8 |
{ "name": "Ichiro", "address": { "zip": "100-0000", "city": "Tokyo", "street": "1-1-1" } } |
このような場合は、まず “address” 情報を格納する “Address” クラスを作り、そして “PersonInfo” クラスのフィールドとして “Address” クラスを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
【Address.java】 package com.example.demo; public class Address { private final String zip; private final String city; private final String street; public Address() { this.zip = "100-0000"; this.city = "Tokyo"; this.street = "1-1-1"; } public String getZip() { return zip; } public String getCity() { return city; } public String getStreet() { return street; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
【PersonInfo.java】 package com.example.demo; public class PersonInfo { private final String name; <span class="has-inline-color has-vivid-red-color">private final Address address; // add the field</span> public PersonInfo(String name) { this.name = name; <span class="has-inline-color has-vivid-red-color">this.address = new Address(); // add the field</span> } public String getName() { return name; } <span class="has-inline-color has-vivid-red-color">// add the method public Address getAddress() { return address; }</span> } |
Springを起動し、URLを開くと、このような結果が得られます。
