5

しかし、私は jax-rs でのプロバイダーの使用法を理解しようとしていました。しかし、ContextResolver の使用方法を理解できませんでした。誰かがこれをいくつかの基本的な例で説明できますか?

4

1 に答える 1

6

シリアライゼーション コンテキスト オブジェクトを解決する際に多く使用されていることがわかります。たとえば、ObjectMapperJSON シリアライゼーション用です。例えば

@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したがって、渡されたマッパーを使用してロジックを実行し、どのマッパー (複数ある場合) をどのクラスに使用するかを決定したい場合、これは本当に好機です。私にとっては、一般的に、マッパーを構成するためだけに使用します。

アイデアは、何らかのコンテキストに基づいて任意のオブジェクトを検索できるということです。をルックアップする方法の例はContextResolverProviders注入可能なインターフェースを使用することです。たとえば、リソース クラスで

@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 に答える