2015-09-09 5 views
1

Но я пытался понять использование Провайдеров в jax-rs. Но не смог понять, как ContextResolver можно использовать. Может кто-нибудь объяснить это с помощью некоторого базового примера?jax-rs ContextResolver <T> undestanding

ответ

2

Вы увидите, что он много используется при разрешении объекта контекста сериализации. Например, 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; 
    } 
} 

Теперь то, что будет происходить в том, что поставщик Джексон, а именно JacksonJsonProvider, когда сериализации, будет первым увидеть, если она была предоставлена ​​ObjectMapper, если не он будет искать в ContextResolver для ObjectMapper и вызвать getContext(classToSerialize) к получите ObjectMapper. Так что это действительно возможность, если мы хотим сделать некоторую логику, используя пройденный Class, чтобы определить, какой из карт (если их несколько) использовать для какого класса. Для меня, как правило, я использую его только для настройки картографа.

Идея состоит в том, что вы можете искать произвольные объекты в базовом контексте. Пример того, как вы могли бы искать ContextResolver, - через интерфейс для инъекций . Например, в ресурсном классе

@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(...); 
    } 
} 
+0

Это был хороший пример. разве он не может использоваться как завод для создания объектов в зависимости от ввода. –

+1

Вы можете прочитать объяснение в [спецификаторе 4.3 Контекста] (https://jsr311.java.net/nonav/releases/1.1/spec/spec.html). В нем нет подробных сведений о том, для чего он должен использоваться, поэтому я предполагаю, что это используется для общего использования. Если вы можете заставить его работать, используйте его, я думаю. –

 Смежные вопросы

  • Нет связанных вопросов^_^