【问题标题】:Jackson ignore attribute on sub class that is 3:d party杰克逊忽略了 3d 派对子类中的属性
【发布时间】:2014-02-10 09:00:18
【问题描述】:

我有一个 3d 库,它包含在我使用的类中,我想用 jackson 将其序列化为 json。

我想jackson对象A,但忽略Class C中的字段而不能更改Class B和C的源代码,这可能吗?

class A {

   B b;
}

class B {
   C c;

}



class C {
 int field; 
}

【问题讨论】:

    标签: java json jackson mongo-jackson-mapper


    【解决方案1】:

    我相信您可以通过使用自定义序列化程序来实现解决方案。

    您可以通过 ObjectMapper 添加自定义序列化程序。我在下面创建了一个小单元测试来演示它是如何实现的:

    import org.codehaus.jackson.JsonGenerator;
    import org.codehaus.jackson.JsonProcessingException;
    import org.codehaus.jackson.Version;
    import org.codehaus.jackson.map.JsonSerializer;
    import org.codehaus.jackson.map.ObjectMapper;
    import org.codehaus.jackson.map.SerializerProvider;
    import org.codehaus.jackson.map.module.SimpleModule;
    import org.junit.Test;
    import java.io.IOException;
    
    public class JacksonSerializerTest {
    
        @Test
        public void test() throws Exception {
            C c = new C("initially lowercase string in c");
            B b = new B(c);
            A a = new A(b);
    
            SimpleModule module = new SimpleModule("MyCustomModule", new Version(1, 0, 0, null));
            module.addSerializer(new CustomSerializerForC());
    
            ObjectMapper mapper = new ObjectMapper();
            mapper.registerModule(module);
    
            String pretty = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(a);
            System.out.println(pretty);
        }
    
        public class A {
            private B b;
    
            public A(B b) {
                this.b = b;
            }
    
            public B getB() {
                return b;
            }
    
            public void setB(B b) {
                this.b = b;
            }
        }
    
        public class B {
            private C c;
    
            public B(C c) {
                this.c = c;
            }
    
            public C getC() {
                return c;
            }
    
            public void setC(C c) {
                this.c = c;
            }
        }
    
        public class C {
            private String value;
    
            public C(String value) {
                this.value = value;
            }
    
            public String getValue() {
                return value;
            }
    
            public void setValue(String value) {
                this.value = value;
            }
        }
    
        public class CustomSerializerForC extends JsonSerializer<C> {
    
            @Override
            public Class<C> handledType() {
                return C.class;
            }
    
            @Override
            public void serialize(C c, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                String upperCase = c.getValue().toUpperCase();
                jsonGenerator.writeString(upperCase);
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 2015-06-20
    • 2023-04-10
    • 1970-01-01
    • 2015-03-28
    • 2022-06-22
    • 1970-01-01
    相关资源
    最近更新 更多