読者です 読者をやめる 読者になる 読者になる

Web系開発メモ

Java, SpringBoot, JavaScript, CSS, HTML などの記事を書いています。

Spark FW:JSONを返す

Spark FW

JavaSpark Framework を使って、JSON の HTTP レスポンスを返してみます。

前提. アプリ資源について

この記事では、Spark FW:HelloWorldを返す の資源(ビルドファイル、コード)を使っています。必要に応じて参照して頂けると嬉しいです。

手順1. ビルドファイルの編集

記事「Spark FW:HelloWorldを返す」のビルドファイルに、GSON の依存性を追加します。

sprkgs/pom.xml(追加部分)

  <dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.0</version>
  </dependency>

手順2. メインクラスの編集

HelloWorld の記事で作成した Main.java を編集します。

package sprkgs;

import static spark.Spark.*;

import java.util.Collections;
import java.util.Map;

import com.google.gson.Gson;

public class Main {
  public static void main(String[] args) {
    get("/hello", (req, res) -> "Hello World");
    get("/json", (req, res) -> msg, gson::toJson);
  }
  static final Map<String, String> msg
    = Collections.singletonMap("msg", "Hello");

  static final Gson gson = new Gson();
}

2つめの get 呼び出し(get("/json", ....)から末尾までを追加しています。GSON の toJson をメソッド参照で渡すと JSON にしてくれるみたいです。

手順3. アプリ起動

上の Main.javaJava アプリとして実行します。

コマンドラインからの実行方法は、HelloWorld の記事にも書いてあります。

手順4. 確認

http://localhost:4567/json にアクセスすると、{"msg":"Hello"} が返ってきます。

ちょっと気になったのは、レスポンスのコンテントタイプが text/html だったことです。コンテントタイプも JSON にしたい場合は、次のように application/json を設定すると良いかもしれません。

get("/json", (req, res) -> {
  res.type("application/json;charset=UTF-8");
  return msg;
}, gson::toJson);

うーん、もうちょっと良い方法があるのでしょうか。

参考文献

ResponseTransformer - Spark

コード

sprkgs - GitHub