Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 問題的解決


在一次寫定義系統統一返回值的情況下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status這個類型的錯誤。網上百度了很多解決的方法。\

具體的方法如下:

  1.在父類的重名的字段前面加上transient。但是你會發現父類中加了transient,如果子類中有多個含有status字段的對象還是會解析失敗。

  2.刪除同名字段,但是更多的情況下,我們已經在數據庫定義了字段了,所以並不適用。最好的規避方法是,在開發過程中少用status等關鍵詞作為字段名稱。

  3.@expose 但是多個status上並不起效(更深原理需要進一步研究)

  4.對象里缺少   private static final long serialVersionUID = 1L;

  5.輸java對象需要實現Serializable接口

經過多個版本比較之后,最后了解了,返回體中包含多個同名字段的情況,在進行Gson解析時會進行序列化操作,導致多個同名字段無法識別。我們可以通過防止這個字段序列化的方式解決,就是將同名字段都加上transient。無論是父類還是子類。

//父類
public class ReportDTO { private String id; private String name; private transient String status; private String creator;
   }

  

子類
public class SonDTO {
    private String executor;
    private String executorName;
    private transient String status;
    private String results;
   
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM