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クラスを作成します。
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” を格納します。
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
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
<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 コマンドを実行します。
c:\demo>mvnw spring-boot:run
Springが起動したら、URLからリクエストしてみます。
おまけ – ネストしたJSONデータを作る
上記の例では、フラットなJSONデータを生成していましたが、ネストしたJSONデータを作りたい場合もあります。
JSONデータはJavaのResourceクラスに対応していますので、Javaのクラスも同様の構成にすればOKです。
例として、先ほどのケースに”Address”という項目を追加し、情報の階層構造を作りたいとします。
{
"name": "Ichiro",
"address": {
"zip": "100-0000",
"city": "Tokyo",
"street": "1-1-1"
}
}
このような場合は、まず “address” 情報を格納する “Address” クラスを作り、そして “PersonInfo” クラスのフィールドとして “Address” クラスを追加します。
【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;
}
}
【PersonInfo.java】
package com.example.demo;
public class PersonInfo {
private final String name;
private final Address address; // add the field
public PersonInfo(String name) {
this.name = name;
this.address = new Address(); // add the field
}
public String getName() {
return name;
}
// add the method
public Address getAddress() {
return address;
}
}
Springを起動し、URLを開くと、このような結果が得られます。