代码之家  ›  专栏  ›  技术社区  ›  paul

杰克逊反序列化Scala的未来

  •  0
  • paul  · 技术社区  · 6 年前

    我试图解释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被调用,映射程序返回到Jersey,但他从未使用FutureDeserializer。

    知道我做错了什么吗?

    0 回复  |  直到 6 年前