Updated at 2022-06-06 09:37

场景

Jackson可以通过@JsonIgnore等注解,使POJO下的一些属性不被序列化/反序列化。

但是@JsonIgnore存在问题,使用注解的前提是可以编辑这个POJO的源码,如果POJO在library中,则无法使用注解。

另一个问题,@JsonIgnore声明后,无法支持“只需要在某一次序列化/反序列化时忽略这个属性,其他地方不对其忽略”的场景。

方案

Jackson提供了一个叫做Mixins的机制,能应对上述2种场景。

public class DemoPojo {
    private Long wanntToIgnoreProperty;

    // getter, setter ...
}
@JsonIgnoreProperties("wanntToIgnoreProperty")
public abstract class DemoPojoMixins {
}
    ObjectMapper oneTimeCopy = globalObjectMapper.copy().addMixIn(DemoPojo.class, DemoPojoMixins.class);

    oneTimeCopy.writeValueAsString(demoPojo);

Java      Jackson