使用 Jackson 忽略序列化时的特定字段

2022-08-31 16:10:06

我正在使用杰克逊图书馆。

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

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 类的一个实例。我做错了什么?


答案 1

好吧,由于某种原因,我错过了这个答案

下面的代码按预期方式工作:

@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);

答案 2

同样值得注意的是使用DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES的解决方案:https://stackoverflow.com/a/18850479/1256179