java - 子类作为 json 父对象
问题描述
我有一个要求,在创建 json 有效负载时需要一个子类作为对象。
事件库
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"
}
}
我可以理解这违反了继承关系,但只想知道是否有任何可用的解决方案。
解决方案
遇到类似问题时我能得到的最接近的方法是创建一个适配器类。此解决方案打印一个额外的属性,例如,如果允许某些继承,则可能会忽略该属性,但我假设不允许,并且除了适配器之外仅使用声明的类,例如:
@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"
}
推荐阅读
- mysql - 了解自联接 (SQL) 中 ON 子句的顺序
- mongodb - Mongo:更新文档和添加/更新 lastModified
- neural-network - 第一个神经网络,麻烦(
- javascript - Microsoft Bot Framework 语音识别网络聊天集成
- r - 从海洋数据中识别和提取剖面的 R 函数?
- r - 为什么 R 将此 data.frame 对象视为列表?
- swift - SwiftUI - NavigationLink 内的 NavigationLink 错误
- java - 如何挑选出缺少哪个 Java 类定义/要导入哪些依赖项?
- javascript - 如何使用AngularJS删除指令内的类?
- image-processing - 使用 FFmpeg 将 JPEG 图像序列无损合并到网格中