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 件のコメント:
コメントを投稿