第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 の依存関係を追加します。
    <repository>
       <id>jboss</id>
       <url>http://repository.jboss.org/maven2</url>
    </repository>

       ...
    <dependency>
       <groupId>org.jboss.resteasy</groupId>
       <artifactId>resteasy-jackson-provider</artifactId>
       <version>1.1.GA</version>
    </dependency>
Copy to Clipboard Toggle word wrap
RESTEasy は Jackson へビルドされた JAX-RS 統合を複数の方法で拡張します。 最初の拡張は application/*+json へのサポートを提供しました。 これまで、 Jackson は application/jsontext/json のみを有効なメディアタイプとして許可しましたが、 application/*+json サポートにより Jackson で JSON ベースのメディアタイプをマーシャルできるようになりました。 例は次の通りです。
@Path("/customers")
public class MyService {

   @GET
   @Produces("application/vnd.customer+json")
   public Customer[] getCustomers() {}
}
Copy to Clipboard Toggle word wrap
RESTEasy の JAXB プロバイダを Jackson と使用すると問題が生じます。 Jackson を使用してJSON を出力するのではなく、 Jettison と JAXB を使用するようにしてください。 Jettison と JAXB を使用するには、 Jackson プロバイダをインストールしないか、 次のように JAXB アノテーションが付けられたクラス上で @org.jboss.resteasy.annotations.providers.NoJackson アノテーションを使用しないようにします。
    @XmlRootElement
    @NoJackson
    public class Customer {...}

    @Path("/customers")
    public class MyService {

       @GET
       @Produces("application/vnd.customer+json")
       public Customer[] getCustomers() {}
    }
Copy to Clipboard Toggle word wrap
JAXB クラスに @NoJackson アノテーションが付けられない場合は、 メソッドパラメータにアノテーションを付けるようにします。
        @XmlRootElement
        public class Customer {...}

        @Path("/customers")
        public class MyService {

           @GET
           @Produces("application/vnd.customer+json")
           @NoJackson
           public Customer[] getCustomers() {}

           @POST
           @Consumes("application/vnd.customer+json")
           public void createCustomer(@NoJackson Customer[] customers) {...}
        }
Copy to Clipboard Toggle word wrap

19.1. 考えられる JAXB プロバイダとの競合

Jackson クラスに JAXB アノテーションが付けられ、 クラスパスに resteasy-jaxb-provider がある場合、 Jettison JAXB マーシャリングコードをトリガすることができます。 JAXB JSON マーシャラを無効にするには、 クラスに @org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes("application/*+json") アノテーションを付けます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat