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/
POJOは以下のように定義します。@Path("endpoint") public class MyResource { @POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public MyObject echoObject(MyObject mo) { return mo; } }
アプリケーションのクラスは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 { }
JSON MOXyモジュール(jersey-media-moxy.jar)はクラスパスに入っているので、Jerseyが自動的にモジュールを発見し、JSONバインディングのサポートが有効になります。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>");
すべてのアプローチおよびモジュールに関する詳細の説明は、以下のリンクからどうぞ。
Jersey 2.0 User Guide
Support for Common Media Type Representations
http://jersey.java.net/documentation/latest/media.html
0 件のコメント:
コメントを投稿