0

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 を使用しません。

私が間違っていることは何ですか?

4

0 に答える 0