Jackson - ignore Map superclass when serializing

前端 未结 3 1706
你的背包
你的背包 2020-12-18 08:27

I have a few model classes that extend LinkedHashMap: they define getters and setters which wrap the Map\'s get and put methods. I am tryi

3条回答
  •  臣服心动
    2020-12-18 08:49

    You can implement your own org.codehaus.jackson.map.DeserializerProvider which extends Jackson's org.codehaus.jackson.map.deser.StdDeserializerProvider and overwrite method _createDeserializer:

    import org.codehaus.jackson.map.SerializerProvider;
    import org.codehaus.jackson.map.deser.StdDeserializerProvider;
    import org.codehaus.jackson.map.DeserializationConfig;
    ...
    
    class MyDeserializerProvider extends StdDeserializerProvider {
    
        @Override
        protected JsonDeserializer _createDeserializer(DeserializationConfig config, JavaType type, BeanProperty property) throws JsonMappingException {
            if (type.isMapLikeType()) {       // (1)
                return this._factory.createBeanDeserializer(config, this, type, property);
            } else {
                return super._createDeserializer(config, type, property);
            }
        }
    }
    
    
    

    (1) use if-condition that meets your needs

    The custom deserializer is registered directly at the ObjectMapper:

    ObjectMapper om = new ObjectMapper();
    om.setDeserializerProvider(new MyDeserializerProvider());
    

    I tested this with Jackson 1.9.11.

    提交回复
    热议问题