George
George

Reputation: 319

How prevent Jackson from serializing a field in a third party class

Heres a question for Jackson 2.3 I don't have the possibility to change to other frameworks.

I want to serialize objects to json using Jackson 2.3. Some of the Objects are from a third party library implementing a particular (external) interface. What I want to achieve is to prevent certain fields in those objects to be serialized. I do not have access to modifying this class so @JsonIgnore wont cut it. Heres an example

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

I'm new to Jackson, but have a feeling that it should be fairly simple to do something like this

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

(I don't think there is something called a Some_Serializer_That_Can_Ignore_Password, what I want is something that does NOT serialize the field) I would prefer not to write a lot of code to make it work, I've seen quite verbose examples for older versions of Jackson, but none for Jackson 2.3.

Thanks!

Upvotes: 4

Views: 1314

Answers (1)

George
George

Reputation: 319

Not really an answer for the original question, but I found a way that worked for excluding particular types, this code ensures that any StackTraceElements are not serialized.

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

Upvotes: 1

Related Questions