Search code examples
javaserializationjackson

Jackson: Serialize the same object into multiple JSONs


I have two POJOs that look like:

public ResponseA {
  private HeavyObject object;
  private AdditionalDataA additionalData;

  public ResponseA(HeavyObject object, AdditionalDataA additionalData) {
    this.object = object;
    this.additionalData = additionalData;
  }
}
public ResponseB {
  private HeavyObject object;
  private AdditionalDataB additionalData;

  public ResponseB(HeavyObject object, AdditionalDataB additionalData) {
    this.object = object;
    this.additionalData = additionalData;
  }
}

and then I have a method that sends these objects to different endpoints, something like:

  public void sendResponses(
      ObjectMapper mapper, 
      HeavyObject object, 
      AdditionalDataA addDataA, 
      AdditionalDataB addDataB) {

    // Here object is serialized twice, which is costly!
    String jsonA = mapper.writeValueAsString(new ResponseA(object, addDataA));
    String jsonB = mapper.writeValueAsString(new ResponseB(object, addDataB));
    sendResponseA(jsonA);
    sendResponseB(jsonB);
}

Is there a way I could serialize these responses so that the HeavyObject is serialized only once?


Solution

  • Yes, you can annotate the object field in ResponseA and ResponseB with @JsonRawValue, convert it to a String, and serialize it in a separate step.