単純な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に直接変換できるように、このすべてのことをやっているのですか?実装コードを使用する代わりに使用できます。
はい。しかし、すでにこれをしていたジャージー。そこで、このプロバイダにアクセスする方法があります(ここではプロバイダはjavax.ws.rs.ext.Providersを意味します)。 –
はい、ジャージーが持つ可能性があります。私が示唆しているように、クラスパスをスキャンすることは1回の操作になります。あなたのアプリのブートストラップ中に行われます。 Btw、[http://code.google.com/p/google-gson/] GSonの使用を検討しましたか?私はそれを使用していないが、プロジェクトの記述は面白そうだった。 – Prashant