新澤西實際上並沒有明確的配置ObjectMapper實例,而是委託給JacksonJsonProvider
,這反過來使用默認映射器實例。你可以通過the JacksonProviderProxy code來追蹤它的工作原理。您可以創建和自定義共享映射器被定義整個應用程序中使用的context resolver:
@Provider
public class ObjectMapperContextResolver implements
ContextResolver<ObjectMapper> {
private ObjectMapper mapper = null;
public ObjectMapperContextResolver() {
super();
// Illustrate configuration of the mapper instance
mapper = new ObjectMapper().configure(
SerializationConfig.Feature.WRAP_ROOT_VALUE, true).configure(
DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
傑克遜提供商將從該解析器檢索其映射器實例,你可以做同樣的在你的代碼,所以:
private static JacksonJsonProvider jackson_json_provider = new JacksonJaxbJsonProvider()
.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
private static ObjectMapper object_mapper = jackson_json_provider.locateMapper(
Object.class, MediaType.APPLICATION_JSON_TYPE);
private static Client client = ClientBuilder.newClient().register(jackson_json_provider);
注意,第二個聲明是不需要強制:
public class MyResource {
@Context
private ContextResolver<ObjectMapper> mapperResolver;
public void someResourceMethod() {
final ObjectMapper mapper = mapperResolver.getContext(Object.class);
}
}
如果你只有'client',你怎麼能從'client'中提取'objectMapper'? – DerekY 2015-07-28 04:58:08
@DerekY我不知道該怎麼做。 – necromancer 2015-08-12 06:32:13