しかし、私は jax-rs でのプロバイダーの使用法を理解しようとしていました。しかし、ContextResolver の使用方法を理解できませんでした。誰かがこれをいくつかの基本的な例で説明できますか?
質問する
4215 次
1 に答える
6
シリアライゼーション コンテキスト オブジェクトを解決する際に多く使用されていることがわかります。たとえば、ObjectMapper
JSON シリアライゼーション用です。例えば
@Provider
@Produces(MediaType.APPLICATION_JSON)
public static JacksonContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper mapper;
public JacksonContextResolver() {
mapper = new ObjectMapper();
}
@Override
public ObjectMapper getContext(Class<?> cls) {
return mapper;
}
}
ここで何が起こるかというと、Jackson プロバイダ、つまりJacksonJsonProvider
シリアライズ時に が与えられているかどうかを最初に確認し、与えられていObjectMapper
ない場合は を検索ContextResolver
し、ObjectMapper
を呼び出しgetContext(classToSerialize)
て を取得しObjectMapper
ます。Class
したがって、渡されたマッパーを使用してロジックを実行し、どのマッパー (複数ある場合) をどのクラスに使用するかを決定したい場合、これは本当に好機です。私にとっては、一般的に、マッパーを構成するためだけに使用します。
アイデアは、何らかのコンテキストに基づいて任意のオブジェクトを検索できるということです。をルックアップする方法の例はContextResolver
、Providers
注入可能なインターフェースを使用することです。たとえば、リソース クラスで
@Path("..")
public class Resource {
@Context
private Providers provider;
@GET
public String get() {
ContextResolver<ObjectMapper> resolver
= providers.getContextResolver(ObjectMapper.class, MediaType.APPLICATION_JSON);
ObjectMapper mapper = resolver.getContext(...);
}
}
于 2015-09-09T11:42:59.657 に答える