在结果 Json 响应中显示 Class 名称而不是对象

Display Class Name instead of object in resultant Json Response

我有一个通用的 class Result<R> 和一个 class JsonResponse

public class JsonResponse {
    private boolean success;
    private Result result; //getter/settter
}

在我的 api 中,我正在为 class ProductDeliveryCounter

返回 json 响应
Constraint constraint= getDeliveryCounter();
JsonResponse returnObject=new JsonResponse();
Result<Constraint> proMap=new Result<Constraint>(constraint);
        returnObject.setResult(proMap);
        
            returnObject.setSuccess(true);        return returnObject;

输出:

提问:有什么方法可以把图片中的object改成constraint

预期输出:

如果您正在使用 Jackson,您可以创建自定义序列化程序来实现此目的。

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();
}

}

然后将 @JsonSerialize(using = CustomSerializer.class) 添加到您的 class JsonResponse 中,如下所示。

@JsonSerialize(using = CustomSerializer.class)
public class JsonResponse {
    private boolean success;
    private Result<?> result;

    //general getters ans setters
}

验证代码段

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":{"Constraint":{"cutOffTime":"2019-12-19T20:59:59.059","currentTime":"2019-12-19T16:51:08.970","isDeliveryPossible":false}}}