如何阻止杰克逊在第三方课程中序列化一个领域

时间:2014-04-30 08:22:45

标签: java json serialization jackson

这是杰克逊的一个问题2.3我无法改变其他框架。

我想使用Jackson 2.3将对象序列化为json。 一些对象来自实现特定(外部)接口的第三方库。 我想要实现的是防止这些对象中的某些字段被序列化。 我没有权限修改这个类,所以@JsonIgnore不会削减它。 下面是一个例子

    public interface ThirdParty{
      public char[] getPassword();
      public String getUser();
      public Department getDepartment();
    }

我是杰克逊的新手,但他觉得做这样的事情应该相当简单

    ObjectMapper mapper=new ObjectMapper();

    SimpleModule testModule = new SimpleModule("DemoModule",VersionUtil.versionFor(this.getClass()));
    testModule.addSerializer(ThirdParty.class, new Some_Serializer_That_Can_Ignore_Password()));
    mapper.registerModule(testModule);

(我不认为有一种称为Some_Serializer_That_Can_Ignore_Password的东西,我想要的是没有序列化字段的东西) 我宁愿不写很多代码来使它工作,我已经看到了杰克逊旧版本的相当冗长的例子,但杰克逊2.3没有。

谢谢!

1 个答案:

答案 0 :(得分:1)

对于原始问题不是真正的答案,但我找到了一种排除特定类型的方法,此代码可确保任何StackTraceElement未被序列化。

    SimpleModule testModule = new SimpleModule("DemoModule", VersionUtil.versionFor(this.getClass()));
    testModule.addSerializer(StackTraceElement.class,new JsonSerializer<StackTraceElement>() {
        @Override
        public void serialize(StackTraceElement value, JsonGenerator jgen, SerializerProvider provider){/*Do not serialize*/}
    });
    mapper.registerModule(testModule);