JSONICを使ってRESTFullなAPIを作ろう

spring

JSONを返却するAPIですが、最近ではすっかりメジャーになった印象を持ちます。

JSONICを使うことで、オブジェクトをJson化することが非常に楽になります。
今回は、JSONICを使って、JSONを返却するAPIを作成する手順を紹介します。

[スポンサーリンク]

API自体は「springsource tool suite Webアプリを自動生成してみよう編」で作成しましたspringMVCを使ったコントローラクラスを流用して使います。

この章でやること

springMVCのコントローラクラスをカスタマイズして、JSONを返却するAPIを作成します。
springMVC+JSONICの組み合わせでRESTFullなAPIを作成していきます。
APIのひな型はこちらを参照して作って下さい。「springsource tool suite Webアプリを自動生成してみよう編

APIの仕様を考えよう

今回作成するAPIは、APIを実行すると以下の2つの情報を返却する簡単なAPIを作成します。
1:家族の名前(磯野カツオ)
2:APIの戻り値(失敗or成功)

コントローラクラスとjspを作ります

今回追加&修正したファイルはこちらです。
jsonic-restfull-api1

JSONICを利用するためにpom.xmlを修正

今回はJSONICを使うので、pom.xmlにJSONICライブラリを取得するよう設定を追記します。
dependenciesタグの直後に、jsonicの情報を追記します。

	<dependencies>
		<!-- add -->
		<dependency>
			<groupId>net.arnx</groupId>
			<artifactId>jsonic</artifactId>
			<version>1.3.0</version>
			<scope>compile</scope>
		</dependency>

APIのコントローラクラス

メインとなるコントローラクラスのロジックです。

/**
 * 家族の名前をJSON形式で返却するAPIクラスです。
 */
@Controller
public class FamilyController {

	private static final Logger logger =
			LoggerFactory.getLogger(FamilyController.class);

	@RequestMapping(value = "/family", method = RequestMethod.GET)
	public String home(HttpServletRequest request,
	                   Locale locale,
	                   Model model) {
		logger.debug("API start");

		model.addAttribute("callback", request.getParameter("callback"));

		// ファミリークラスに名前をセットします。
		Family family = new Family();
		family.setFirstName("カツオ");
		family.setLastName("磯野");

		// リターンコード&メッセージをセットします。
		Message message = new Message();
		message.setReturnCode(0);
		message.setMessage("success");
		
		// ファミリークラス、メッセージクラスをJSON化します。
		String jsonFamily = JSON.encode(family);
		String jsonMessage = JSON.encode(message);

		// jspにJSONを表示させるよう設定します。
		model.addAttribute("responseData", jsonFamily);
		// jspにメッセージを表示させるよう設定します。
		model.addAttribute("responsMessage", jsonMessage);

		return "response";
	}

	/**
	 * 家族の名前を入れるクラスです。
	 */
	private class Family {
		// 名
		private String firstName;
		// 姓
		private String lastName;
		public String getFirstName() {
			return firstName;
		}
		public void setFirstName(String firstName) {
			this.firstName = firstName;
		}
		public String getLastName() {
			return lastName;
		}
		public void setLastName(String lastName) {
			this.lastName = lastName;
		}
	}

	/**
	 * APIのリターンメッセージを入れるクラスです。
	 */
	private class Message {
		// 戻り値
		private int returnCode;
		// メッセージ
		private String message;
		public int getReturnCode() {
			return returnCode;
		}
		public void setReturnCode(int returnCode) {
			this.returnCode = returnCode;
		}
		public String getMessage() {
			return message;
		}
		public void setMessage(String message) {
			this.message = message;
		}
	}

APIのJSP

実際に値を出力する(レスポンス)jspです。

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
${callback}
({
    "responsMessage" :
    '${responsMessage}'
    ,
    "responsData" :
    '${responseData}'
})

実行結果

APIを実行するとJSONが出力されます。

ブラウザからの実行方法については、「springsource tool suite Webアプリを自動生成してみよう編」を参照して下さい。

jsonic-restfull-api1

文字化けへの対処方法

ブラウザから実行してもし文字化けが発生した場合は、「【springmvc】ブラウザで文字化けした時の対応方法」を参照して下さい。

解説

JSON形式への変換はJSONICを使って行っています。以下がJSONICを使用している部分です。このクラスではJSONICでjavaクラス→JSON(文字列)に変換してJSPにセットしています。

		// ファミリークラス、メッセージクラスをJSON化します。
		String jsonFamily = JSON.encode(family);
		String jsonMessage = JSON.encode(message);

ダウンロード

GitHubでサンプルソースを公開しています。こちらからご自由にダウンロードして下さい。

最後に

springMVCを使えばAPIが簡単に実装できます。またJSONICを使えばJavaオブジェクト→jsonへ簡単にコンバートすることが可能です。今回は簡単なjsonを返却するAPIでしたが、もう少し複雑なJSON(例えばリストが入れ子になっている。)もJSONICを使えば簡単に作成すること出来ます。
次回は今回作成したAPIをajaxで取り込んでみたいと思います。