如果你使用Jackson,你可以创建一个自定义的序列化器来实现这一点。
类 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();
}
}
然后将@JsonSerialize(using = CustomSerializer.class) 添加到您的班级JsonResponse,如下所示。
@JsonSerialize(using = CustomSerializer.class)
public class JsonResponse {
private boolean success;
private Result<?> result;
//general getters ans setters
}
验证码sn-p
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));
控制台输出
{"success":true,"result":{"约束":{"cutOffTime":"2019-12-19T20:59:59.059","currentTime":"2019-12-19T16:51:08.970 ","isDeliveryPossible":false}}}