我有一個模板對象類型 ExternalActionReqBean 有一個對象,可以通過指示操作字段設置任何類讓我們說,如果 action="FROZEN" , ExternalActionReqBean->payload 將使用 ExternalActionFrozenReqBean 類類型,如果 action="UNFROZEN" ExternalActionUnFrozenReqBean 類類型將被使用。如果有效載荷如下所示,實現這一目標的最佳實踐是什么?{"txnID":"txn","action":"FROZEN","resource":"PNSENDER","payload":{"msisdn_list":["xxxx","xxx","xxx"]}}ExternalActionReqBean externalActionReqBean = GSON.fromJson(payload, ExternalActionReqBean.class); if("FROZEN".equals(externalActionReqBean.getAction())){ // externalActionFrozenReqBean = GSON.fromJson(externalActionReqBean.getPayload(),ExternalActionFrozenReqBean.class); }@Data@AllArgsConstructorpublic class ExternalActionReqBean { private String txnID; private String action; private String resource; private Object payload;}@Datapublic class ExternalActionFrozenReqBean { private List<String> msisdn_list;}@Datapublic class ExternalActionUnFrozenReqBean { private String result;}
1 回答
開滿天機
TA貢獻1786條經驗 獲得超13個贊
我已經更改了 ExternalActionReqBean 類簽名,它的類型被轉換為通用,而不是使用 TypeToken 如下。
@Data
@AllArgsConstructor
public class ExternalActionReqBean<T> {
private String txnID;
private String action;
private String resource;
private T payload;
}
代碼:
if ("FROZEN".equals(externalActionReqBean.getAction())) {
Type complexType = new TypeToken<ExternalActionReqBean<ExternalActionFrozenReqBean>>() {}.getType();
ExternalActionReqBean<ExternalActionFrozenReqBean> result = GSON.fromJson(payload, complexType);
}
感謝https://futurestud.io/tutorials/gson-advanced-generics,您可以在“泛型反序列化”下找到更多信息
添加回答
舉報
0/150
提交
取消
