第19章 Jackson による JSON サポート
RESTEasy は、 JSON の Jettison JAXB アダプタを除く Jackson プロジェクトとの統合をサポートします。 Jackson の出力形式は BadgerFish や Jettison の形式よりも直感的に理解しやすいと思うユーザーが多く存在します。
Jackson は http://jackson.codehaus.org より入手可能です。 Jackson は JSON 間での Java オブジェクトのマーシャリングを容易にします 。Jackson には JavaBean ベースのモデルや JAXB と似た API があります。 RESTEasy は Jackson Tutorial の説明通りに JavaBean モデルと統合します。
ご自分のプロジェクトに Jackson を追加するには、次のようにビルドに Maven の依存関係を追加します。
RESTEasy は Jackson へビルドされた JAX-RS 統合を複数の方法で拡張します。 最初の拡張は
application/*+json へのサポートを提供しました。 これまで、 Jackson は application/json と text/json のみを有効なメディアタイプとして許可しましたが、 application/*+json サポートにより Jackson で JSON ベースのメディアタイプをマーシャルできるようになりました。 例は次の通りです。
RESTEasy の JAXB プロバイダを Jackson と使用すると問題が生じます。 Jackson を使用してJSON を出力するのではなく、 Jettison と JAXB を使用するようにしてください。 Jettison と JAXB を使用するには、 Jackson プロバイダをインストールしないか、 次のように JAXB アノテーションが付けられたクラス上で
@org.jboss.resteasy.annotations.providers.NoJackson アノテーションを使用しないようにします。
JAXB クラスに
@NoJackson アノテーションが付けられない場合は、 メソッドパラメータにアノテーションを付けるようにします。
19.1. 考えられる JAXB プロバイダとの競合 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Jackson クラスに JAXB アノテーションが付けられ、 クラスパスに
resteasy-jaxb-provider がある場合、 Jettison JAXB マーシャリングコードをトリガすることができます。 JAXB JSON マーシャラを無効にするには、 クラスに @org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes("application/*+json") アノテーションを付けます。