Search code examples
javagenericsjackson-databind

Generic POJO to JSON using jackson with dynamic json key as per Generic class


I have a POJO like:

 class Wrapper,T> {
     private int count;
     private T data;
     // getters setters
}

While converting it to JSON using Jackson, json is something like:

{
count:1,
**data**:{}
}

I need the data key to be changed as per class name T or some other value related to class name, how can I achieve this. Please suggest. Thankyou.


Solution

  • Using a custom serializer, you can do anything you want since you have complete control over the serialization process. See for example https://www.baeldung.com/jackson-custom-serialization.

    Your serialize method would look something like this:

    @Override
    public void serialize(
      Wrapper<?> value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException {
    
        String derivedName = value.getClass().getSimpleName() + "Data"; // just an example
    
        jgen.writeStartObject();
        jgen.writeNumberField("count", value.getCount());
        jgen.writeObjectField(derivedName, value.getData());
        jgen.writeEndObject();
    }