If you are using Jackson
, you can create a customized serializer to achieve this.
Class CustomSerializer
class CustomSerializer extends JsonSerializer<JsonResponse> {
@Override
public void serialize(JsonResponse value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
jgen.writeStartObject();
jgen.writeBooleanField("success", value.isSuccess());
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.convertValue(value.getResult().getObject(), JsonNode.class);
JsonNode rootNode = mapper.createObjectNode();
((ObjectNode) rootNode).set(value.getResult().getObject().getClass().getSimpleName(), node);
jgen.writeObjectField("result", rootNode);
jgen.writeEndObject();
}
}
And then add @JsonSerialize(using = CustomSerializer.class)
to your class JsonResponse
as follows.
@JsonSerialize(using = CustomSerializer.class)
public class JsonResponse {
private boolean success;
private Result<?> result;
//general getters ans setters
}
Code snippet for verification
Constraint constraint = new Constraint();
constraint.setCutOffTime("2019-12-19T20:59:59.059");
constraint.setCurrentTime("2019-12-19T16:51:08.970");
constraint.setDeliveryPossible(false);
Result<Constraint> result = new Result<>(constraint);
JsonResponse returnObject = new JsonResponse();
returnObject.setSuccess(true);
returnObject.setResult(result);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(returnObject));
Console output
{"success":true,"result":{"Constraint":{"cutOffTime":"2019-12-19T20:59:59.059","currentTime":"2019-12-19T16:51:08.970","isDeliveryPossible":false}}}