byte[] として渡す Future を逆シリアル化する方法を 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();
//TODO: Breakpoint never stop here
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 が呼び出され、マッパーがジャージーに返されますが、彼は FutureDeserializer を使用しません。
私が間違っていることは何ですか?