首页 文章

忽略Jackson的序列化特定字段

提问于
浏览
56

我正在使用 Jackson 图书馆 .

我想在序列化/反序列化时忽略特定字段,例如:

public static class Foo {
    public String foo = "a";
    public String bar = "b";

    @JsonIgnore
    public String foobar = "c";
}

应该给我:

{
foo: "a",
bar: "b",
}

但是我得到了:

{
foo: "a",
bar: "b",
foobar: "c"
}

我正在用这段代码序列化对象:

ObjectMapper mapper = new ObjectMapper();
String out = mapper.writeValueAsString(new Foo());

我的类中字段的真实类型是Log4J Logger类的实例 . 我究竟做错了什么?

3 回答

  • 85

    好的,所以出于某种原因我错过了this answer .

    以下代码按预期工作:

    @JsonIgnoreProperties({"foobar"})
    public static class Foo {
        public String foo = "a";
        public String bar = "b";
    
        public String foobar = "c";
    }
    
    //Test code
    ObjectMapper mapper = new ObjectMapper();
    Foo foo = new Foo();
    foo.foobar = "foobar";
    foo.foo = "Foo";
    String out = mapper.writeValueAsString(foo);
    Foo f = mapper.readValue(out, Foo.class);
    
  • 1

    另外值得注意的是这个解决方案使用DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES:https://stackoverflow.com/a/18850479/1256179

  • 0

    参考来自How can I tell jackson to ignore a property for which I don't have control over the source code?

    你可以使用Jackson Mixins . 例如:

    class YourClass {
      public int ignoreThis() { return 0; }    
    }
    

    有了这个Mixin

    abstract class MixIn {
      @JsonIgnore abstract int ignoreThis(); // we don't need it!  
    }
    

    有了这个:

    objectMapper.addMixIn(YourClass.class, MixIn.class);
    

相关问题