Jackson 解析json資料之忽略解析欄位註解@JsonIgnoreProperties
以前解析json用的慣的就是Google的gson了,用慣了基本就用它了,一直也沒發現什麼大問題,因為都是解析簡單的json資料。但是最近學習springboot,要解析一個比較複雜的json資料。就照之前的用gsonformat自動生成實體類,讓gson直接解析,本想著一切ok了,可是確報錯了,剛開始以為gsonformat生成的類有錯誤,因為畢竟json資料較為複雜,於是多生成幾次,可是還是不行。面對這樣複雜的資料,我可不想手動寫實體類,於是想著又換了自動生成實體類的工具,可是結果還是未能如願。於是想著能從錯誤的日誌中發現點什麼,可是無奈gson沒有列印具體的出錯的地方,後來搗鼓了好久,想著不如換個解析工具吧。於是上網找了找,覺得Jackson不錯,趕緊試用,發現還真不錯,雖然也沒能解析成功,但是它打印出了詳細的出錯資訊,照著出錯的資訊改了馬上就解析成功了。
說說出錯的原因:平時解析json呢基本介面提供的json都是很明確的,所以用gson解析一般不會有啥大問題。但是此次情況不同,介面的資料我無法完全的預知,所以實體類欄位有可能不完整。所以當返回的json資料裡包含了實體類沒有的欄位時gson就有可能出錯,但是對於這種情況用gson解析我是沒找到相應的解決辦法,如果誰知道麻煩告知一下,謝謝。
當然用Jackson解決就非常容易了,只需要在實體類上加上註解就可以。
@JsonIgnoreProperties(ignoreUnknown = true) class ExtraBean { private boolean is_museuser; public boolean isIs_museuser() { return is_museuser; } public void setIs_museuser(boolean is_museuser) { this.is_museuser = is_museuser; } }
@JsonIgnore註解用來忽略某些欄位,可以用在Field或者Getter方法上,用在Setter方法時,和Filed效果一樣。這個註解只能用在POJO存在的欄位要忽略的情況,不能滿足現在需要的情況。
@JsonIgnoreProperties(ignoreUnknown = true),將這個註解寫在類上之後,就會忽略類中不存在的欄位,可以滿足當前的需要。這個註解還可以指定要忽略的欄位。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的欄位不會被序列化和反序列化。
到此順利解決。(還有Gson有類似的實現請告知一下,本人只知道gson轉string忽略欄位的方法,謝謝)