web-dev-qa-db-ja.com

REST WebサービスのSpring 4とJersey

Spring 4.0.6バージョンで新しいアプリケーションを作成する予定です。 「XML」または「JSON」を返すことができるコントローラーを使用します。前のプロジェクトでは、JAX-RS APIを使用してRESTをサポートするためにSpringでJerseyを実装しましたが、高齢者からの記事や提案を読んだ後、春はかなり良いRESTサポート。

JAX-RSとJerseyを使用せずにSpring RESTサポートを使用する場合、私を本当に混乱させたポイントのいくつかは次のとおりです。

  1. Spring MVCでどのようにマーシャリングとアンマーシャリングが行われましたか?

  2. マーシャリングまたはアンマーシャリングにjax-rsを使用する必要があるかどうか。

  3. マーシャリングとアンマーシャリングがスプリングによって自動的に処理される場合、xmlRootElementsをどのように認識しますか。

SpringがRESTの非常に良いサポートを証明している場合、私はまだ混乱しています。もっと詳しく知りたいと本当に思っています。

間違ったことを言った場合は無視してください。例付きの説明は本当に役立ちます。

前もって感謝します!!

114
Robin Saxena

ジャージーとSpring MVCの両方が素晴らしいと思います-各プロジェクトには独自のスタイルと強みがあります。とにかく、スタックオーバーフローは主観的な比較を行うのに適した場所ではありません(質問はすぐに終了します)。他のすべてに既にSpringを使用していて、JAX-RSを使用するためにrequiredではない場合、Spring MVCは完全に理にかなっています。

マーシャリング(アン)などの機能に関して、JAX-RSは結局のところ単なる仕様です。他のライブラリは、同じAPIを実装しなくても同様の機能を提供できます。

  1. MessageBodyReaders /Writersの代わりに、Spring MVCは HttpMessageConverters を使用して、RESTリソースをマーシャリング(アン)します。 Spring MVCは、コンテンツネゴシエーションを処理し、ジョブに最適なコンバーターを選択します(メソッドに注釈を付けて、作成/消費するメディアタイプを示唆できます)。

  2. いいえ、JAX-RSを使用してリソースを(アン)マーシャリングする必要はありません。実際、JAX-RS実装とSpring MVCは、サードパーティのシリアル化ライブラリを使用してジョブを実行します。そのため、特定の標準に関連付けられていません。

  3. 4.0.6バージョンでは、JSONのJackson、XMLのJAXBなど、多くの HttpMessageConverters をサポートしています。 Spring 4.1.0でさらに追加 HttpMessageConverters

最後の点に答えるために、@XmlRootElementはJAXBアノテーションであり、JAX-RSの一部ではありません。 SpringはJAXBをサポート

SpringでRESTを使用したより完全な例については、 この入門ガイド を確認してください(10〜15分で実行される完全な例を取得できます)。

繰り返しになりますが、質問の最後の部分は非常に主観的です-ジャージーとスプリング(Dropwizard、Play!Frameworkなど)だけでなく、JVMでRESTサービスを構築するための多くの一般的なソリューションがあります。

118
Brian Clozel

AFAIK Spring RESTサポートは、JerseyがJAX-RS仕様を実装している間に、Spring MVCに基づいており、JAX-RS実装に基づいていません。プロジェクトにSpring(Core、AOP、またはMVC)が含まれている場合は、JAX-RS実装者よりもSpring ReSTサポートを選択します。

成熟したジャージーをお勧めします。JAX-RSを実装しており、使いやすいです。

22
VGaur