Java™ Architecture for XML Binding (JAXB) アノテーション付きオブジェクトと Jackson を使用すると、JavaScript Object Notation (JSON) 要求と応答を処理できます。
Jackson は、WebSphere® Application Server におけるデフォルトの JSON プロセッサーです。
Jackson はデフォルトで JAX-RS ランタイム環境に含まれているので、構成は不要です。
このタスクについて
このタスクでは、JAXB アノテーション付きオブジェクトと Jackson を使用して JSON 要求と応答を処理する方法を取り上げます。
手順
- リソース・メソッドを作成します。 リソース・メソッドが JSON コンテンツを戻すようにするには、JAXB クラスのインスタンスを直接戻すか、JAXB オブジェクトを応答エンティティーとして含む javax.ws.rs.core.Response オブジェクトを戻します。
また、@Produces("application/json") アノテーションを追加するか、応答オブジェクトの Content-Type ヘッダーを "application/json" に設定する必要があります。
以下の例では、BookList JAXB クラスの単純な JSON リターン・メソッドを示しています。
@GET
@Produces("application/json")
public BookList getBookList() {
BookList list = /* get a book list */
return list;
}
または@GET
@Produces("application/json")
public javax.ws.rs.core.Response getBookList() {
BookList list = /* get a book list */
return Response.ok(list).type(MediaType.APPLICATION_JSON_TYPE).build();
}
- XML オブジェクトと JSON オブジェクトの両方を戻す場合、同じメソッドに最小限の変更を加えて再利用できます。 @Produces アノテーションで、"application/xml"、"application/json"、"text/xml" を指定しなければなりません。
以下の例では、BookList クラスの BookList JAXB オブジェクトを戻す単純な JSON リターン・メソッドを示しています。
@GET
@Produces("application/json", "application/xml", "text/xml")
public BookList getBookList() {
BookList list = /* get a book list */
return list;
}
以下の例では、BookList JAXB クラスの javax.ws.rs.core.Response オブジェクトを戻す単純な JSON リターン・メソッドを示しています。
@GET
@Produces("application/json", "application/xml", "text/xml")
public javax.ws.rs.core.Response getBookList() {
BookList list = /* get a book list */
return Response.ok(list).build();
}
クライアント要求の Accept HTTP ヘッダーによるコンテンツ・ネゴシエーションは、リソース・メソッドによって JSON 表現または XML 表現のどちらが戻されるかを判別するのに役立ちます。
詳しくは、コンテンツ・ネゴシエーションに関する資料を参照してください。
JAXB アノテーション付きオブジェクトを再利用すると、同じコードを JSON と XML の両方に使用できるので、開発時間を短縮できます。
出力で特定の JSON フォーマットや XML フォーマットが必要ではない場合には、同一のモデル・コードを再利用すると役立つ場合があります。
特定の XML および JSON の出力が必要で、同じ JAXB アノテーション付きクラスを再利用できない場合には、2 つの異なるリソース・メソッドを使用するしか問題を解決する方法はありません。
JSON リソース・メソッドでは @Produces("application/json") アノテーションを付ける必要があり、XML リソース・メソッドでは @Produces("application/xml", "text/xml") アノテーションを付けなければなりません。
タスクの結果
Jackson JSON プロセッサーを使用して、JAXB アノテーション付きクラスが含まれる JSON 表現が戻りました。