2012-03-01 9 views
0

単純なPOJOをJsonに変換する方法について、ジャージーの内部を調べていました。 JerseyにはProvidersというインターフェースがあり、classとmediaTypeのcontextResolversのリストを提供します。 contextResolverを取得すると、ContextとMarshallerを取得して、以下のようなjson文字列を取得できます。JAX-RSを使用してPOJOにJSONを解析し、特定の実装コードを使用しない

Pojo "obj"をシリアル化すると仮定します。コードは次のようになります

Providers ps = ... 
ContextResolver<JAXBContext> resolver = ps.getContextResolver(obj.getClass(), MediaType.APPLICATION_JSON_TYPE); 
JAXBContext ctx = resolver.getContext(obj.getClass()); 
ctx.createMarshaller().marshal(obj, writer); 

上記のように、有効なコンテキストリゾルバからjsonを持つPOJOをコンベアすることができます。しかし、問題はプロバイダーのハンドラーをどのように取得するかということです。

PS:私はこのコードをコンパイルしていませんが、ソースから見ることができるから、これはジャージーのことです。なぜ私はJAX-RS APIを使用してオブジェクトをJSONに直接変換できるように、このすべてのことをやっているのですか?実装コードを使用する代わりに使用できます。

答えて

0

あなたの質問は「プロバイダの検索方法」ですか?

@Providerで注釈が付けられたクラスパス内のクラスを見つけるコードを記述する必要があります。 JAX-RSリソースCLASで

+0

はい。しかし、すでにこれをしていたジャージー。そこで、このプロバイダにアクセスする方法があります(ここではプロバイダはjavax.ws.rs.ext.Providersを意味します)。 –

+0

はい、ジャージーが持つ可能性があります。私が示唆しているように、クラスパスをスキャンすることは1回の操作になります。あなたのアプリのブートストラップ中に行われます。 Btw、[http://code.google.com/p/google-gson/] GSonの使用を検討しましたか?私はそれを使用していないが、プロジェクトの記述は面白そうだった。 – Prashant

1

、プロデューサーを注入するジャージーを伝えるために@Contextアノテーションを使用:

@Context Producers producers;