我有一个要求,在创建json负载时需要一个子类作为对象。
EventBase
public class EventBase {
@JsonProperty("event_id")
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
PaymentCapture (子类)
@JsonTypeName("resource")
public class PaymentCapture extends EventBase {
@JsonProperty("parent_payment")
private String parentPayment;
public String getParentPayment() {
return parentPayment;
}
public void setParentPayment(String parentPayment) {
this.parentPayment = parentPayment;
}
}
我需要以下形式的json负载:
{
"id": "someId",
"resource": {
"parent_payment": "23434"
}
}
我可以理解这违反了继承关系,但是只是想知道是否有可用的解决方案。
答案 0 :(得分:0)
遇到类似问题时,我能得到的最接近的结果是创建适配器类。此解决方案将打印出一个额外的属性,如果例如允许某些继承,则可能会忽略该属性,但我假设不允许这样做,并且除了适配器之外,还仅使用声明的类,例如:
@RequiredArgsConstructor
public class PaymentCaptureAdapterClass {
@NonNull
@JsonProperty
private PaymentCapture resource;
@JsonProperty
private String getId() {
return resource.getId();
}
}
将此与代码结合使用:
ObjectMapper om = new ObjectMapper();
om.enable(SerializationFeature.INDENT_OUTPUT);
PaymentCapture pc = new PaymentCapture();
pc.setId("someId");
pc.setParentPayment("23434");
log.info("\n{}", om.writeValueAsString(new AdapterClass(pc)));
打印类似:
{
"resource" : {
"event_id" : "someId", // might be able to be ignored
"parent_payment" : "23434"
},
"id" : "someId"
}