忽略 Jackson 序列化的特定字段
Posted
技术标签:
【中文标题】忽略 Jackson 序列化的特定字段【英文标题】:Ignore specific field on serialization with Jackson 【发布时间】:2012-02-01 20:26:28 【问题描述】:我正在使用 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 类的实例。我做错了什么?
【问题讨论】:
【参考方案1】:好的,所以由于某种原因我错过了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);
【讨论】:
【参考方案2】:另外值得注意的是这个使用 DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES 的解决方案:https://***.com/a/18850479/1256179
【讨论】:
【参考方案3】:来自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);
【讨论】:
以上是关于忽略 Jackson 序列化的特定字段的主要内容,如果未能解决你的问题,请参考以下文章
当值为“null”时,Jackson 忽略自定义字段反序列化器
如何在没有jackson注释的情况下忽略反序列化的某些字段?
jackson 序列化忽略未知字段: How to Ignore Unknown Properties While Parsing JSON in Java