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?
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.