亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

運行時 GSON 對象類型轉換

運行時 GSON 對象類型轉換

翻過高山走不出你 2021-12-01 16:51:08
我有一個模板對象類型 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,您可以在“泛型反序列化”下找到更多信息


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號