我试图解释Jersey和Jackson如何反序列化我作为字节[]传递的未来。
我创建自己的ContextResolver
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private static ObjectMapper mapper = null;
public ObjectMapperContextResolver() {
mapper = ObjectMapperFactory.getObjectMapper();
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
以及ObjectMapper的实现
public static ObjectMapper getObjectMapper() {
ObjectMapper defaultObjectMapper = new ObjectMapper();
SimpleModule futureModule = new SimpleModule("FutureModule");
futureModule.<Future>addDeserializer(Future.class, new FutureDeserializer<String>());
defaultObjectMapper.registerModule(futureModule);
return defaultObjectMapper;
}
最后在我的FutureDeserializer的实现中
public class FutureDeserializer<T> extends StdDeserializer<Future<T>>{
public FutureDeserializer() {
super(Future.class);
}
@Override
public Future<T> deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
ObjectMapper mapper=(ObjectMapper)jp.getCodec();
return null;
}
}
然后我在我的
ResourceConfig
在比赛开始前
JerseyTest
ResourceConfig rc = new ResourceConfig();
rc.register(SpringLifecycleListener.class);
rc.register(RequestContextFilter.class);
rc.register(new JacksonFeature());
rc.register(new ObjectMapperContextResolver());
但是当我运行测试时,ObjectMapperContextResolver被调用,映射程序返回到Jersey,但他从未使用FutureDeserializer。
知道我做错了什么吗?