jax-rs ContextResolver<T> 理解
jax-rs ContextResolver<T> undestanding
但我试图了解 jax-rs 中 Provider 的用法。但是无法理解如何使用 ContextResolver。有人可以用一些基本的例子来解释吗?
您会看到它在解析序列化上下文对象时被大量使用。例如 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
做一些逻辑来确定哪个映射器(如果有多个映射器)用于哪个 class。一般来说,我只用它来配置映射器。
这个想法是您可以根据某些上下文查找任意对象。如何查找 ContextResolver
的示例是通过 Providers
可注入接口。例如在资源 class
@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(...);
}
}
但我试图了解 jax-rs 中 Provider 的用法。但是无法理解如何使用 ContextResolver。有人可以用一些基本的例子来解释吗?
您会看到它在解析序列化上下文对象时被大量使用。例如 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
做一些逻辑来确定哪个映射器(如果有多个映射器)用于哪个 class。一般来说,我只用它来配置映射器。
这个想法是您可以根据某些上下文查找任意对象。如何查找 ContextResolver
的示例是通过 Providers
可注入接口。例如在资源 class
@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(...);
}
}