在一次寫定義系統統一返回值的情況下,碰到了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; }