strings.Builder 源碼解析、 存在意義、 實現原理、 常用方法、 寫入方法、 擴容方法、 String() 方法、 禁止複製、 線程不安全、 io.Writer 介面、 代碼、 strings.Join 源... ...
在一次寫定義系統統一返回值的情況下,碰到了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; }