26 Aug 2015, 13:12

Playで JSONを扱う方法のメモ(Java)

Play Frameworkの JSONを扱う方法についてのメモです.

  • JSONデータを受け取る方法
  • JSONデータを返す方法

やること

以下の3ステップ.

  1. conf/routesでエントリポイントを定義
  2. app/controllersに コントローラ追加
  3. URL アクセス

Environment

  • Play 2.4.2

Jsonデータを受け取る方法

  1. conf/routesでエントリポイントを定義 ————————————–
POST    /test/jsonreq               controllers.MyJsonSample.sayHello2()
  1. app/controllersに コントローラ追加 ————————————-

name を受け取って、Hello をつけて返す.

public Result sayHello2() {
    JsonNode json = request().body().asJson();
    if(json == null) {
        return badRequest("Expecting Json data");
    } else {
        String name = json.findPath("name").textValue();
        if(name == null) {
            return badRequest("Missing parameter [name]");
        } else {
            return ok("Hello " + name);
        }
    }       
}   
  1. URL アクセス —————
curl -H "Content-Type: application/json" -d '{"name":"tsu-nera"}' http://localhost:9000/test/jsonreq

Jsonデータを返す方法

  1. conf/routesでエントリポイントを定義 ————————————–
GET     /test/jsonresp              controllers.MyJsonSample.sayHello()
  1. app/controllersに コントローラ追加 ————————————-

テストした構造は、ObjectNodeの中にObjectNodeを渡す.

public Result sayHello() {
    ObjectNode result = Json.newObject();
    result.put("exampleField1", "Hello world!");
    result.put("name", "tsu-nera");

    ObjectNode result2 = Json.newObject();
    result2.put("subField1", "foo");
    result2.put("subField2", "bar");
    result.put("exampleField3", result2);

    return ok(result);
}   
  1. URL アクセス —————
 curl  http://localhost:9000/test/jsonresp

{"exampleField1":"Hello world!","name":"tsu-nera","exampleField3":{"subField1":"foo","subField2":"bar"}}

Code

package controllers;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import play.*;
import play.mvc.*;

import play.libs.Json;

public class MyJsonSample extends Controller {

    public Result index() {
        return ok();
    }

    public Result sayHello() {
        ObjectNode result = Json.newObject();
        result.put("exampleField1", "Hello world!");
        result.put("name", "tsu-nera");

        ObjectNode result2 = Json.newObject();
        result2.put("subField1", "foo");
        result2.put("subField2", "bar");
        result.put("exampleField3", result2);

        return ok(result);
    }   

    public Result sayHello2() {
        JsonNode json = request().body().asJson();
        if(json == null) {
            return badRequest("Expecting Json data");
        } else {
            String name = json.findPath("name").textValue();
            if(name == null) {
                return badRequest("Missing parameter [name]");
            } else {
                return ok("Hello " + name);
            }
        }       
    }   
}

24 Aug 2015, 13:27

Play frameworkでHello World (Java)

Javaで有名な Webフレームワーク、Playで Hello Worldをしてみました. (=\^ー゜)ノ

Install

参考: install

最新版のactivator バイナリを以下から取得.

ダウンロードした圧縮ファイルを解凍し、任意のディレクトリに配置. Playの実行ファイルactivator へ環境変数PATHを設定.

以下を実行し、しばらくまつ(結構時間かかる). ツールのダウンロードが走る.

$ activator ui

http://localhost:8888 にアクセスしてドキュメントが見えればインストール完了.

Hello Play !!

Hello worldをしてみる.以下の手順にしたがいます.

まずは、プロジェクト作成 (=\^ー゜)ノ

$ activator new my-first-app play-java

activatorを起動して、いろいろダウンロード.

$ cd my-first-app
$ activator run

これで http://localhost:9000 にアクセスすると、Welcome ページが見える.

view で hello world

app/view/index.scala.htmlをひらき、Hello Worldを追記.

@(message: String)

Hello, Play!!

再度 Webにアクセスすると、 Hello, Playの文字が (´∇`)

controllers で hello world

次に、 app/controllers/Application.javaを開き printlnを追記.

package controllers;

import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {

    public Result index() {
        System.out.println("Hello, Play!!");

        return ok(index.render("Your new application is ready."));
    }

}

再度, http://localhost:9000 にアクセスしてみると、 コンソール画面に. Hello, Playの文字が (´∇`)

ここでの感動ポイントは、*リコンパイル不要* ということ. Javaだろ?! 動的言語かよ!! (=\^ー゜)ノ

オリジナルのエントリポイント

オリジナルのエントリポイントをつくってみる. conf/routesを編集する. ここでエントリポイントを定義する.

以下の行を追加. 記法は、Scalaのようだ.

# My Sample
GET     /test/:number               controllers.MySample.index(number: String)

つづいて、オリジナルの controllerを作成. app/controllers/MySample.java

package controllers;

import play.*;
import play.mvc.*;

public class MySample extends Controller {

    public Result index(String number) {
        System.out.println("number is " + number);
        return ok();
    }
}

これで、たとえば、http://localhost:9000/test/200 にアクセスすると、 “number is 200” という文字がコンソールに出力される.

おわりに

Special Thanks

以上、Happy Hacking!!