[Java] JSON Binding with JAX-RS - Moxy, JSON-P, Jackson, Jettison (TOTD #214)

原文はこちら。
https://blogs.oracle.com/arungupta/entry/json_binding_with_jax_rs

プレゼンテーション中に頂く典型的な質問の一つに、「JAX-RSでJSONを使えるようにするにはどうすればいいの?」というものです。

JerseyでJSONを使えるようにする場合、基本的に3個のアプローチと、4個の異なるモジュールがあります。以下に簡単にまとめました。

MOXy JSON-P Jackson Jettison
POJO-based JSON Binding × ×
JAXB-based JSON Binding ×
Low-level JSON parsing & processing × ×

MOXyは、JerseyアプリケーションでサポートしているJSONバインディングのうちデフォルトかつ望ましい方法です。新しいサンプルが以下に追加されています。
glassfish~svn - Revision 62395: /branches/arun/javaee7-samples/samples/jaxrs/moxy
https://svn.java.net/svn/glassfish~svn/branches/arun/javaee7-samples/samples/jaxrs/moxy/
リソースの定義は以下のように行います。
@Path("endpoint")
public class MyResource {
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public MyObject echoObject(MyObject mo) {
        return mo;
    }
}
POJOは以下のように定義します。
public class MyObject {

    private String name;
    private int age;

    public MyObject() {
    }

    public MyObject(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
アプリケーションのクラスは
@ApplicationPath("webresources")
public class MyApplication extends Application {
}
クライアントコードは、
Client client = ClientBuilder.newClient();

WebTarget target = client.target("http://"
        + request.getServerName()
        + ":"
        + request.getServerPort()
        + request.getContextPath()
        + "/webresources/endpoint");
System.out.println("POST request");
MyObject mo = target
        .request()
        .post(Entity.entity(new MyObject("Duke", 18), MediaType.APPLICATION_JSON), MyObject.class);
out.println("Received response: " + mo.getName() + ", " + mo.getAge() + "<br><br>");
JSON MOXyモジュール(jersey-media-moxy.jar)はクラスパスに入っているので、Jerseyが自動的にモジュールを発見し、JSONバインディングのサポートが有効になります。

すべてのアプローチおよびモジュールに関する詳細の説明は、以下のリンクからどうぞ。
Jersey 2.0 User Guide
Support for Common Media Type Representations
http://jersey.java.net/documentation/latest/media.html

0 件のコメント:

コメントを投稿