如何让@JsonIgnore处理泛型类(List)?

时间:2014-05-16 04:04:42

标签: java jackson

相同@JsonIgnore同时应用于String和List。它正在使用String而不是List。 杰克逊版本2.3.0。下面是打印输出setter属性的示例程序。仍然为testList属性显示了Setter属性。 解决方法可能是mapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);,但这不是我想要的行为。我想控制对象本身。

package my.com.myriadeas.ilmu.bootstrap;

import java.util.Iterator;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.DeserializationConfig;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder;
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
import com.fasterxml.jackson.databind.deser.SettableBeanProperty;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.TypeFactory;

public class JsonFactoryTest {

    /**
     * @param args
     * @throws JsonMappingException
     */
    public static void main(String[] args) throws JsonMappingException {
        ObjectMapper mapper = new ObjectMapper();
        //mapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
        mapper.registerModule(new TestJacksonModule());
        JavaType javaType = TypeFactory.defaultInstance().uncheckedSimpleType(
                TestJsonProperty.class);
        System.out.println(mapper.canDeserialize(javaType));
    }

    public static class TestJsonProperty {
        @JsonIgnore
        private String testString;
        @JsonProperty
        public String getTestString() {
            return testString;
        }
        @JsonIgnore
        public void setTestString(String testString) {
            this.testString = testString;
        }

        @JsonIgnore
        private List<String> testList;
        @JsonProperty
        public List<String> getTestList() {
            return testList;
        }
        @JsonIgnore
        public void setTestList(List<String> testList) {
            this.testList = testList;
        }
    }

    public static class TestJacksonModule extends SimpleModule {
        /**
         * 
         */
        private static final long serialVersionUID = -8628204972239032380L;

        public TestJacksonModule() {
            setDeserializerModifier(new AssociationUriResolvingDeserializerModifier());
        }
    }

    private static class AssociationUriResolvingDeserializerModifier extends
            BeanDeserializerModifier {
        public AssociationUriResolvingDeserializerModifier() {

        }

        @Override
        public BeanDeserializerBuilder updateBuilder(
                DeserializationConfig config, BeanDescription beanDesc,
                BeanDeserializerBuilder builder) {
            Iterator<SettableBeanProperty> properties = builder.getProperties();
            while (properties.hasNext()) {
                System.out.println("deserialize property= " + properties.next());
            }
            return builder;

        }
    }

}

0 个答案:

没有答案