Skip to content

Instantly share code, notes, and snippets.

@christophercurrie
Created February 11, 2014 17:20
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save christophercurrie/8939489 to your computer and use it in GitHub Desktop.
Save christophercurrie/8939489 to your computer and use it in GitHub Desktop.
Example of Polymorphic Deserialization using Jackson
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value=AudioAttachment.class, name="audio"),
@JsonSubTypes.Type(value=LinkAttachment.class, name="link")
})
public class Attachment {
}
@JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)
public class Audio {
public int aid;
public int ownerId;
}
public class AudioAttachment extends Attachment {
public Audio audio;
}
public class Link {
public String url;
public String title;
}
public class LinkAttachment extends Attachment {
public Link link;
}
@jhagege
Copy link

jhagege commented Jun 16, 2016

Hi,

Thanks for this very clear example.
Do you know if this could work if the SubTypes are in different Maven projects ?

i.e: Audio, AudioAttachment and Link are each inside a different Maven project than Attachment.

I have a problem with circular dependency and can't figure a way out of it.
Thanks

@mkes
Copy link

mkes commented Jan 19, 2017

Could you please give an example of Custom Deserializer for Object Composition.

public class Parent{

 String p_memeber1;
 String p_memeber2;
 CompClass1  comp1;
 CompClass2 comp2;

...
..
}

public Class CompClass1{
String comp1_member1;
String comp1_member2;
SubCompClass1 subCom1;
...
...
}

public Class CompClass2{
String comp2_member1;
String comp2_member2;
SubCompClass2 subCom2;
...
...
}

I want the json String to be deserialize into a Parent Object with all the nested objects details populated as well.

@jloisel
Copy link

jloisel commented Feb 14, 2018

Here is a good article describing how to deal with Polymorphism and Jackson Deserialization: https://octoperf.com/blog/2018/02/01/polymorphism-with-jackson/

@juli0mendes
Copy link

Excellent tutorial!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment